J'ai essayé de vérifier si la PHONE_TYPE
variable contient l'une des trois valeurs valides.
if [ "$PHONE_TYPE" != "NORTEL" ] || [ "$PHONE_TYPE" != "NEC" ] ||
[ "$PHONE_TYPE" != "CISCO" ]
then
echo "Phone type must be nortel,cisco or nec"
exit
fi
Le code ci-dessus n'a pas fonctionné pour moi, alors j'ai essayé ceci à la place:
if [ "$PHONE_TYPE" == "NORTEL" ] || [ "$PHONE_TYPE" == "NEC" ] ||
[ "$PHONE_TYPE" == "CISCO" ]
then
: # do nothing
else
echo "Phone type must be nortel,cisco or nec"
exit
fi
Existe-t-il des moyens plus propres pour ce type de tâche?
shell-script
shell
munish
la source
la source
if [[ ! $PHONE_TYPE =~ ^(NORTEL|NEC|CISCO)$ ]]; then
De bonnes réponses et une leçon précieuse;) Je veux seulement compléter avec une note.
Le type de test que l'on choisit d'utiliser dépend fortement du code, de la structure, de l'environnement, etc.
Une alternative pourrait être d'utiliser un commutateur ou une
case
instruction comme dans:En deuxième lieu, vous devez faire attention en utilisant des noms de variables en majuscule. Cela permet d'éviter les collisions entre les variables introduites par le système, qui sont presque toujours toutes en majuscules. Ainsi
$phone_type
au lieu de$PHONE_TYPE
.Bien que celui-ci soit sans danger, si vous avez pour habitude d'utiliser des majuscules, vous pourriez le dire un jour
IFS="boo"
et vous serez dans un monde de souffrance.Cela facilitera également le repérage de ce qui est quoi.
Pas une obligation mais une serait fortement envisager.
C'est probablement aussi un bon candidat pour une fonction. Cela rend le code plus facile à lire et à maintenir. Par exemple:
la source
Vous devez utiliser des AND, pas des OR.
ou
la source
Pour corriger une réponse ci-dessus (car je ne peux pas encore commenter):
Veuillez noter que vous avez besoin d’au moins 4 bash pour cette utilisation de = ~
Cela ne fonctionne pas avec bash 3.
J'ai testé sur MS Windows 7 en utilisant bash 4.3.46 (fonctionne bien) et bash 3.1.17 (ne fonctionne pas)
Le LHS de = = doit être entre guillemets. Ci-dessus, PHONE_TYPE = "SPACE TEL" correspondrait également.
la source
Utilisez [[à la place
la source
[[
vs[
n'aide pas avec la logique étant hors tension.Juste une proposition de variante basée sur la solution @ 0x80:
la source