Dans ce tutoriel, nous analysons les instructions conditionnelles prises en charge dans les cas Bash. Nous passons en revue des exemples pratiques et discutons quand un cas Bash … la déclaration esac est mieux utilisée qu'une déclaration plus traditionnelle. if .. then .. fi
déclaration.
Bash cas .. Déclarations esac en bash
Disponible nativement depuis le shell bash, condamnations avec sursis de cas, formulé à l'aide de la case
et esac
expressions idiomatiques (un idiome est un mot ou un groupe de mots, o un mot-clé, avec des modèles d'utilisation établis; une façon d'exprimer un langage informatique), on peut construire un conditionnel complexe au cas par cas (d'où le terme case
) recherche et déclaration d'exécution par affaire.
La partie recherche d'une déclaration basée sur la casse est parfois appelée Veuillez sélectionner, ce qui conduit au terme sélectionner la déclaration / Cas (ou au contraire), utilisé dans d’autres langages de codage tels que VBA, pour faire référence au même type de paradigme de programmation. Un autre ensemble de langues (comme c #, C ++, Java et JavaScript) ils appellent cela un changer O interrupteur / Cas déclaration. Tous ces éléments ont des significations et des opérations similaires..
Construisons notre premier case .. esac
déclaration à l’aide d’un script simple.
Un simple Cas .. Ald texte
Nous définissons notre script de test test.sh
comme suit:
#!/bin/bash
case "${1}" dans
1) écho "L’option était 1!";;
2) écho "L’option était 2!";;
*) écho "L’option était autre chose: '${1}'";;
Ald
Ensuite, nous rendons notre script exécutable en exécutant chmod +x test.sh
puis nous exécutons le script lui-même, passant à chaque fois une option différente en entrée.
Dans notre cas clause d'ouverture, nous spécifions que nous voulons utiliser la première option d'entrée ($1
) comme variable à examiner. Notre case .. esac
l'instruction vérifiera chaque option (comme indiqué dans le texte précédant un )
clause de clôture idiomatique) et plus tard traiter le bloc de code (après le )
langage) pour obtenir le bon résultat.
Notez qu'il y a deux ;
fin des fins d'instruction à la fin de chaque ligne. La raison en est simple; la syntaxe bash normale vous oblige à avoir au moins un idiome de fin ;
(à moins que ce ne soit déjà à la fin d'une ligne), mais dans le case .. esac
déclaration, nous avons besoin d'un supplément ;
pour indiquer que nous terminons un bloc de code pour un bloc d'exécution de code de cas spécifique.
Nous pouvons voir comment nous avons défini le code pour les deux cas où 1
et 2
écriture se pasan al, respectivement. Malgré cela, Que se passe-t-il lorsque nous dépensons autre chose? Dans ce cas, nous voulons sauter à notre autre clause, indiqué par un universel *
langage.
On voit comment on passe 1
O 2
tout le script, l'action correcte est prise respectivement; Option was 1/2!
. On voit aussi comment si on fait autre chose, les *
Le bloc de code s'exécute correctement, et montre également notre première variable passée au script. Et si nous ne transmettions aucune option à notre script? Les case .. esac
le code serait encore évalué, et puisque rien ne correspond à part notre fourre-tout *
clause, qui court:
Ensuite, Et si on supposait, quelque chose qui peut sembler logique, que nous pouvons laisser un seul ;
déclaration de la fin de la ligne de chaque case .. esac
simplement parce qu’en même temps une fin de vie est remplie (fin de ligne)?
Veuillez noter qu’une seule résiliation ;
a été utilisé dans ce script. Bash ne le rend pas possible et une erreur se produit; la syntaxe de terminaison finale de ;;
est obligatoire, et quelque chose à faire attention lors de l’écriture case .. esac
déclarations
Parce que Cas .. Ald Et non et?
Nous pourrions également écrire le code ci-dessus en utilisant un if
déclaration:
#!/bin/bash if [ "${1}" == "1" ]; then echo "L’option était 1!" elif [ "${1}" == "2" ]; then echo "L’option était 2!" else echo "L’option était autre chose: '${1}'"; être
Cela semble comparable en qualité de code et en brièveté par rapport à notre case .. esac
code, et dans les situations données et les cas d'utilisation spécifiques comme ceux-ci, souvent un if .. then .. elif .. else .. fi
La réponse basée fonctionnera bien.
Cela dit, si et quand la complexité de la sélection devient plus complexe ou plus grande, ou s'il y a des sélections de cas multicouches à effectuer (Notez que case .. esac
peut être imbriqué), peut valoir la peine d'utiliser case .. esac
déclarations à la place.
Une autre fonctionnalité intéressante de case .. esac
déclarations est que l'on peut lister deux options possibles pour un seul bloc d'exécution de code, comme nous le verrons dans notre prochain exemple, malgré cela, cela peut aussi être fait avec bash standard if
déclarations, en utilisant comme exemple le -a
(et et -o
(vous) options de notre clause de test et en spécifiant une clause de test secondaire. Par exemple, if [ "${1}" -eq 1 -o "${1}" -eq 3 ]; then ...
Notez qu'ici, nous utilisons également des comparaisons numériques au lieu de comparaisons textuelles comme dans notre exemple précédent.
Pour plus d'informations sur if .. then .. else .. elif .. fi
conditionnels, Vous pouvez également lire notre article Tests conditionnels dans Bash: si, alors, autre, elif.
Élargir notre cas
Développons notre script ci-dessus et rendons nos conditions un peu plus complexes:
#!/bin/bash
case "${1}" dans
1|3) écho "L’option était 1!"
écho "Ou, l'option était 3!";;
2|'une') Cas "${1}" dans
2) écho "L’option était 2!";;
'une') écho "L'option était "a"!";;
Ald;;
*) écho "L’option était autre chose: '${1}'";;
Ald
Dans cette circonstance, Nous avons répertorié deux options possibles pour chaque bloc de code et les avons séparées par un |
séparateur. Remarquez comment tout fonctionne bien et les entrées 1
et 3
sont analysés correctement. Dans le deuxième bloc de code, nous avons créé un cas imbriqué et utilisons toutes les entrées possibles pour le deuxième bloc de code (a savoir 2
et a
) comme nouvelles options dans l'esac imbriqué / lycée.
Cela fonctionne à nouveau parfaitement. Le flux à travers le code est que dans le premier case
déclaration, la 2|'a'
la branche est prise 2
O a
Ça arrive, et plus tard le deuxième case
garantit que soit 2
O a
est sélectionné individuellement. L'utilisation de ;;
chaque fois que nous voulons terminer un bloc de code pour une option spécifique, et cela s'applique également à la fin de la nidification case .. esac
, encore avec ;;
, Autrement dit esac;;
.
Fin
Dans ce tutoriel, nous analysons des exemples pratiques de bash case .. esac
déclarations. Nous avons également vu où les déclarations de cas sont une meilleure option que les plus traditionnelles.. if .. then .. fi
déclarations prises en charge.
Si Bash l'interesa, peut trouver l'amorce: Boucles Bash: pour, pendant et plus, Bash Process Termination Hacks et comment analyser correctement les noms de fichiers dans Bash.
Prendre plaisir!