2017-01-25 2 views
0

Je veux vérifier dans mon script bash, si une variable est égale à la valeur 1 ou égale à la valeur 2.Vérifiez si le paramètre est la valeur X ou Y valeur

Je ne veux pas utiliser quelque chose comme ça, parce que les 'if true statements' sont les mêmes (certains grands textes d'écho), quand la variable est égale à 1 ou 2. Je veux éviter la redondance des données.

if [ $1 == 1 ] ; then echo number 1 ; else 
if [ $1 == 2 ] ; then echo number 2 ; fi 

Plus quelque chose comme

if [ $1 == 1 OR 2 ] ; then echo number 1 or 2 ; fi 
+0

À côté: '==' n'est pas un opérateur de comparaison valide dans '['. Bash le permet comme une extension, mais la [norme pertinente] (http://pubs.opengroup.org/onlinepubs/9699919799/utilities/test.html) spécifie uniquement '=' pour la comparaison de chaînes. –

+0

Sans doute duplicative de http://stackoverflow.com/questions/21157435/bash-string-compare-to-multiple-correct-values, ou http://stackoverflow.com/questions/22259259/bash-if-statement-to -check-if-string-is-equal-to-one-of-plusieurs-chaîne-littéraux –

Répondre

2

Puisque vous comparez des valeurs entières, utilisez le bash opérateur arithmétique (()), comme

(($1 == 1 || $1 == 2)) && echo "number 1 or 2" 

Pour les chaînes de traitement utilisant l'opérateur regex dans bash

test="dude" 
if [[ "$test" =~ ^(dude|coolDude)$ ]]; then echo "Dude Anyway"; fi 
# literally means match test against either of words separated by | as a whole 
# and not allow for sub-string matches. 
+1

'-o' est explicitement marqué obsolète dans la révision actuelle de la norme POSIX. Utilisez '[un] || [un autre] '. Et '==' est une extension nonportable; utilisez '=' pour les comparaisons de chaînes dans '[]'. –

+1

(voir les marquages ​​'[OB]' sur http://pubs.opengroup.org/onlinepubs/9699919799/utilities/test.html) –

1

probablement l'option la plus facile à étendre est une déclaration case:

case $1 in 
    [12]) 
     echo "number $1" 
esac 

Le motif [12] matchs 1 ou 2. Pour les plus grandes plages, vous pouvez utiliser [1-5], ou des modèles plus compliqués comme [1-9]|[1-9][0-9] pour faire correspondre n'importe quel nombre de 1 à 99.

Lorsque vous avez plusieurs cas, vous devez les séparer par un ;;.