10
votes

Vérifiez si une chaîne contient astérisque (*)

Je veux vérifier si ma chaîne contient un ou plusieurs astérisques.

J'ai essayé ceci: xxx

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)

aucune idée, suggestion?

Merci


2 commentaires

Mon système Init n'utilise pas / bin / bash en tant qu'interprète, il utilisera plutôt / bin / sh .


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


7 Réponses :


7
votes

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 


0 commentaires

1
votes

Que se passe-t-il si vous remplacez

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


2 commentaires

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" = ~ ". **. *"]]



0
votes
if echo $date_alarm|perl -e '$_=<>;exit(!/\*/)'
then
    ...
fi

0 commentaires

1
votes
case "$date_alarm" in
*\**)
  ...
  break
  ;;
*)
  # else part
  ...
  ;;
esac
The syntax is, well, /bin/sh, but it works.

0 commentaires

0
votes

enfin xxx

a fait l'astuce

chose étrange = ~. *. ne fonctionne que dans le contexte init pendant l'arrêt, Mais travaillez parfaitement si lancé dans le contexte de Bash ....


1 commentaires

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.



2
votes
expr "$date_alarm" : ".*\*.*"

1 commentaires

Un peu d'explication serait bien;)



0
votes

Pas besoin de rediriger stdout comme les autres le faire. Utilisez l'option -q du grep à la place:

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


0 commentaires