2009-07-28 14 views
5

Voglio verificare se la mia stringa contiene uno o più asterischi.Controlla se una stringa contiene asterisco (*)

Ho provato questo:

if [[ $date_alarm =~ .*\*.* ]] 
then 
    ... 
fi 

Ha funzionato quando lancio direttamente lo script, ma non se questo script viene chiamato durante l'arresto (script installato nel runlevel 0 e 6 attraverso update-rc.d)

Qualche idea, suggerimento?

Grazie

+1

La mia ipotesi è che il tuo sistema init non usi '/ bin/bash' come interprete, invece userà'/bin/sh'. –

+0

Se la risposta di William ha funzionato, non dimenticare di fare clic sul pulsante "Accetta risposta"! – dbr

risposta

2

Citare sempre le stringhe.

Per controllare se la stringa $ date_alarm contiene un asterisco, si può fare:

 
if echo x"$date_alarm" | grep '*' > /dev/null; then 
    ... 
fi 
+0

Funziona molto grazie mille – voidAndAny

0

cosa succede se si sostituisce

if [[ $date_alarm =~ .*\*.* ]] 

con

if [[ "$date_alarm" =~ .*\*.* ]] 

si potrebbe anche voler Da provare:

if [[ "$date_alarm" =~ '\*+' ]] 

non è sicuro su quello ...

riguarda

+0

se [["$ date_alarm" = ~. * \ *. *]] Non funziona, ma come ho detto la cosa strana è che non funziona solo in contesto init durante arresto se [[ "$ date_alarm" = ~ '\ * +']] non testato Tahnks – voidAndAny

+0

citare il modello: se [[ "$ date_alarm" = ~] "* \ *. *."] – bstpierre

0
if echo $date_alarm|perl -e '$_=<>;exit(!/\*/)' 
then 
    ... 
fi 
1
case "$date_alarm" in 
*\**) 
    ... 
    break 
    ;; 
*) 
    # else part 
    ... 
    ;; 
esac 

La sintassi è, beh,/bin/sh, ma funziona.

0

Infine

if echo x"$date_alarm" | grep '*' > /dev/null; then 

ha fatto il trucco

Cosa strana = ~. *. non funziona solo nel contesto di init durante l'arresto, ma funzionano perfettamente se lancio nel contesto bash ....

+0

non c'è bisogno di chiamare un programma esterno come grep per fare quello che vuoi. In bash, la dichiarazione del caso dovrebbe essere sufficiente. – ghostdog74

2
expr "$date_alarm" : ".*\*.*" 
+1

un po 'di spiegazione sarebbe bello;) – MUG4N

0

Non c'è bisogno di reindirizzare stdout, come fanno gli altri. Utilizzare invece l'opzione -q di grep:

se echo x "$ date_alarm" | grep -q '*'; poi

Problemi correlati