2009-07-28 8 views
5

Je veux vérifier si ma chaîne contient un ou plusieurs astérisques.Vérifie si une chaîne contient un astérisque (*)

J'ai essayé:

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

Il a travaillé quand je lance le script directement, mais pas si ce script est appelé lors de l'arrêt (script installé dans le niveau d'exécution 0 et 6 via update-rc.d)

Une idée, une suggestion?

Merci

+1

Je suppose que votre système d'initialisation n'utilise pas '/ bin/bash' comme interpréteur, mais plutôt'/bin/sh'. –

+0

Si la réponse de William a fonctionné, n'oubliez pas de cliquer sur le bouton "Accepter la réponse"! – dbr

Répondre

2

Toujours citer les chaînes.

Pour vérifier si le date_alarm string $ contient un astérisque, vous pouvez faire:

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

Fonctionne très bien merci beaucoup – voidAndAny

0

ce qui se passe si vous remplacez

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

avec

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

vous pouvez également essayer:

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

pas sûr que l'on ...

ce qui a trait

+0

if [["$ date_alarm" = ~. * \ *. *]] Ne fonctionne pas, mais comme je l'ai dit, l'étrange est que cela ne fonctionne pas seulement dans le contexte init pendant arrêt si [[ "$ date_alarm" = ~ \ * + ']] pas testé tahnks – voidAndAny

+0

le modèle entre guillemets: if [[ "$ date_alarm" = ~] "* \ *. *."] – bstpierre

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

La syntaxe est, bien,/bin/sh, mais cela fonctionne.

0

Enfin

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

a fait l'affaire

Chose étrange = ~. *. ne fonctionne pas seulement dans le contexte d'initialisation lors de l'arrêt, mais fonctionne parfaitement si le lancement dans le contexte bash ....

+0

pas besoin d'appeler un programme externe tel que grep pour faire ce que vous voulez. En bash, la déclaration de cas devrait suffire. – ghostdog74

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

un peu d'explication serait bien;) – MUG4N

0

Pas besoin de rediriger vers comme d'autres le font stdout. Utilisez l'option -q de grep à la place:

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