2009-07-28 20 views
5

Quiero verificar si mi cadena contiene uno o más asteriscos.Compruebe si una cadena contiene Asterisk (*)

He intentado esto:

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

Funcionó cuando inicio directamente el guión, pero no si este script se llama durante el apagado (guión instalado en el nivel de ejecución 0 y 6 a través de update-rc.d)

¿Alguna idea, sugerencia?

Gracias

+1

Supongo que su sistema init no usa '/ bin/bash' como intérprete, sino que usará'/bin/sh'. –

+0

Si la respuesta de William funcionó, no olvides hacer clic en el botón "Aceptar respuesta". – dbr

Respuesta

2

Siempre cite cadenas.

Para comprobar si la cadena $ date_alarm contiene un asterisco, que puede hacer:

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

Funciona muy bien muchas gracias – voidAndAny

0

lo que sucede si se reemplaza

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

con

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

también puede que quiera para intentar:

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

no está seguro acerca de eso ...

respecto

+0

if [["$ date_alarm" = ~. * \ *. *]] No funciona, pero como he dicho, lo extraño es que no funciona solo en el contexto init durante apagado si [[ "$ date_alarm" = ~ '\ +']] no probado Tahnks – voidAndAny

+0

citar el patrón: Si [[ "$ date_alarm" = ~] "* \ *. *."] – bstpierre

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

La sintaxis es, bueno,/bin/sh, pero funciona.

0

Finalmente

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

hizo el truco

Lo extraño = ~. *. no funciona sólo en el contexto de inicio durante el apagado, pero si funcionan perfectamente lanzamiento en contexto fiesta ....

+0

no es necesario llamar al programa externo, como grep, para hacer lo que desee. En bash, la declaración del caso debería ser suficiente. – ghostdog74

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

un poco de explicación sería bueno;) – MUG4N

0

No hay necesidad de redirigir la salida estándar al igual que lo hacen otros. Use la opción -q de grep en su lugar:

if echo x "$ date_alarm" | grep -q '*'; luego

Cuestiones relacionadas