Comment utiliser le boîtier … Déclarations esac en bash

Contenu

Bash Shell

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.

Un cas simple ... déclaration esac en bash

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:

Ne pas passer de variable à notre script de test fonctionne également à cause de la clause * dans notre cas .. déclaration de l'esac

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)?

Résiliation incorrecte du bloc de code dans un cas Bash.

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

Une alternative à une instruction case..esac utilisant une instruction if..then..elif..else..fi

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

Un cas plus complexe ... instruction esac en bash avec des sélecteurs supplémentaires

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!

Abonnez-vous à notre newsletter

Nous ne vous enverrons pas de courrier SPAM. Nous le détestons autant que vous.