Je veux vérifier si ma chaîne contient un ou plusieurs astérisques.
J'ai essayé ceci: p> Il a fonctionné lorsque je lance directement le script, mais pas Si ce script est appelé pendant l'arrêt (script installé dans le niveau d'exécution 0 et 6 via update-rc.d) p> aucune idée, suggestion? p> Merci P> P> P> P> P> P> P> P> P> P> P> P> P> P> P> P> P> P> P> P> P> P> P> P> P> P> P> P> P> P >
7 Réponses :
Toujours citer des cordes.
Pour vérifier si la chaîne $ datte_alarm contient un astérisque, vous pouvez faire: p>
if echo x"$date_alarm" | grep '*' > /dev/null; then ... fi
Que se passe-t-il si vous remplacez
if [[ "$date_alarm" =~ '\*+' ]]
Si [["$ datte_alarm" = ~. **. *]] Ne fonctionne pas, mais comme je l'ai dit que l'étrange chose est qu'elle ne fonctionne que dans le contexte init pendant l'arrêt si [["$ date_alarm" = ~ '* +']] non testé tahnks
Citez le motif: si [["$ date_alarm" = ~ ". **. *"]]
if echo $date_alarm|perl -e '$_=<>;exit(!/\*/)' then ... fi
case "$date_alarm" in *\**) ... break ;; *) # else part ... ;; esac The syntax is, well, /bin/sh, but it works.
enfin a fait l'astuce p> chose étrange = ~. *. em> ne fonctionne que dans le contexte init pendant l'arrêt, Mais travaillez parfaitement si lancé dans le contexte de Bash .... p> p>
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.
expr "$date_alarm" : ".*\*.*"
Un peu d'explication serait bien;)
Pas besoin de rediriger stdout comme les autres le faire. Utilisez l'option -q du grep à la place: p>
Si echo x "$ date_alarm" | grep -q '*'; alors p>
Mon système Init n'utilise pas
/ bin / bash code> en tant qu'interprète, il utilisera plutôt
/ bin / sh code>.
Si la réponse de William a fonctionné, n'oubliez pas de cliquer sur le bouton "Accepter la réponse"!