web-dev-qa-db-fra.com

Rechercher la sous-chaîne dans la variable de script Shell

J'ai une chaîne

$VAR="I-UAT"; 

dans mon code de script Shell. J'ai besoin d'une instruction conditionnelle pour vérifier si "UAT" est présent dans cette chaîne.

Quelle commande dois-je utiliser pour obtenir un booléen vrai ou faux en sortie? Ou existe-t-il un autre moyen de le vérifier?

21
batty

Quelle coquille? Utilisation de bash:

if [[ "$VAR" =~ "UAT" ]]; then
    echo "matched"
else
    echo "didn't match"
fi
21
Andrew Clark

Vous pouvez le faire de cette façon:

case "$VAR" in
  *UAT*)
   # code when var has UAT
  ;;
esac
8
Diego Sevilla

La méthode classique, si vous savez à l'avance quelle chaîne vous recherchez, est une instruction case:

case "$VAR" in
*UAT*) : OK;;
*)     : Oops;;
esac

Vous pouvez utiliser une commande appropriée à la place de : commande. Cela fonctionnera aussi avec les obus Bourne et Korn, pas seulement avec Bash.

5
Jonathan Leffler
found=`echo $VAR | grep -c UAT`

Ensuite, testez $ non différent de zéro.

2
jman

Dans le script bash que vous pourriez utiliser

if [ "$VAR" != "${VAR/UAT/}" ]; then
  # UAT present in $VAR
fi
1
Neil

essayez avec grep:

$ echo I\-UAT | grep UAT
$ echo $?
0
$ echo I\-UAT | grep UAX
$ echo $?
1

donc tester

if [ $? -ne 0 ]; then
  # not found
else
  # found
fi
1
marcelog