GNU/Linux >> Tutoriels Linux >  >> Linux

Utilisation des déclarations de cas dans Bash

Lors de l'écriture de scripts Bash, il est courant de vérifier une chaîne par rapport à une variable, puis de faire quelque chose en fonction de ce qui a été spécifié.

Considérez le script suivant. Il vérifie le premier argument spécifié par un utilisateur et fait différentes choses en fonction de ce qui a été donné :

#!/usr/bin/env bash
if [[ "${1}" == "" ]]; then
	echo "No shape was specified."

elif [[ "${1}" == "square" ]]; then
	echo "You specified 'square'."

elif [[ "${1}" == "circle" ]]; then
	echo "You specified 'circle'."

elif [[ "${1}" == "triangle" ]]; then
	"You specified 'triangle'." 
    
else
	echo "Unknown shape '${1}'."
    exit 1

fi

Cela illustre, bien que sans fonctionnalité, une tâche simple qui peut répéter une forme connue à un utilisateur, ou si la forme est inconnue, afficher un message d'erreur.

Tout va bien et dandy là-dedans, et tout fonctionne comme prévu. Mais regardez combien de lignes cela a pris. Voyez comment vous devez gérer chaque option qu'un utilisateur passe à travers un elif déclaration ?

Maintenant, l'imagerie de ce programme a encore plus d'options, disons 20. Avec l'approche actuelle, vous allez écrire un if instruction avec 20 elif sections à l'intérieur.

Oui, vous pourrez probablement le lire pour la plupart. Mais c'est maladroit, prend trop de place, et surtout, il existe une meilleure alternative.

Présentation de l'instruction case dans Bash

C'est là qu'interviennent les instructions de cas. Celles-ci peuvent réduire le nombre de lignes de code dont vous avez besoin pour vérifier les choses de loin par rapport à if déclarations.

Le même if l'instruction que vous avez utilisée pour vérifier les options fournies pourrait être réécrite comme ceci à l'intérieur d'un cas :

#!/usr/bin/env bash
case "${1}" in
	"")         echo "No option was specified."; exit 1 ;;
    square)     echo "You specified 'square'." ;;
    circle)     echo "You specified 'circle'." ;;
    triangle)   echo "You specified 'triangle'." ;;
    *)          echo "Unknown shape '${1}'."; exit 1 ;;
esac

Regardez à quel point cela semble plus simple et organisé. C'est 12 lignes de code dans le if déclaration, et seulement 7 dans le case une. Et plus vous autorisez d'options, plus la différence devient drastique.

Et c'est là que case les déclarations brillent. Bien que les deux soient complètement lisibles, surtout en petite quantité, case les déclarations rendent simplement tout plus propre et plus maintenable à long terme.

Comment créer une instruction case dans Bash ?

Les déclarations de cas sont assez simples à comprendre avec juste un peu de pratique. Sur ce, voici les bases de ce qui se passe :

La première ligne que vous avez vue était case ${1} in . Le ${1} donne la chaîne qui sera vérifiée, ici étant le premier argument passé au script.

Par exemple, considérez cette déclaration de cas :

case linux in
    windows)    echo "windows" ;;
    macos)      echo "macos" ;;
    linux)      echo "linux" ;;
esac

Dans cet exemple, il exécutera toujours echo "linux" . Le case *string* in part spécifie simplement la chaîne que vous allez vérifier, puis les options en dessous exécuteront les commandes chaque fois qu'une correspondance est trouvée.

Ensuite, vous commencez à spécifier vos options. Rappelez-vous, vous aviez "" , square , circle , triangle , et * comme options dans votre premier script.

Les instructions de cas sont vérifiées de haut en bas et ne s'exécutent que sur la première correspondance. Prenons l'exemple suivant :

case linux in
	linux)      echo "linux" ;;
    windows)    echo "windows" ;;
    linux)      echo "linux 2.0" ;;
esac

Ici, la seule commande qui s'exécuterait serait echo "linux" . La deuxième correspondance serait alors ignorée, car une correspondance avait déjà été trouvée.

Chaque ligne d'une instruction case doit également se terminer par ;; . Cela signifie la fin de la liste des commandes pour une option et qu'aucune autre commande ne doit être traitée.

La liste des arguments dans une instruction case (le linux) et windows) les pièces prennent également en charge les caractères génériques. Ainsi, en entrant quelque chose comme linu*) correspondrait à la fois à linux et linus .

Enfin, vous terminez l'instruction case avec esac . Cela lui permet de savoir que vous avez listé tout ce que vous voudriez qu'il traite, comme done ferait dans un for ou while boucle.

Pour mémoriser le mot-clé pour terminer un énoncé de cas, rappelez-vous simplement que esac est case en arrière.

Énoncés de cas en pratique - vérifications d'arguments

Une utilisation fréquente des instructions de cas dans ma propre programmation est la vérification par rapport à une liste d'arguments.

Supposons que vous autorisez les options suivantes à être fournies à votre programme :

  • --vertical
  • --add-txt
  • --replace
  • --verify

Pour vérifier cela dans une instruction case, vous pouvez utiliser quelque chose comme ceci :

while [[ "${1}" != "" ]]; do
	case "${1}" in
    	--vertical)    verticle="true" ;;
        --add-txt)     add_txt="true" ;;
        --replace)     replace="true" ;;
        --verify)      verify="true" ;;
    esac
    
    shift 1
done

Cela exécute un while boucle while ${1} (le premier argument donné à un script) n'est pas vide. Il vérifie ensuite par rapport à une liste d'arguments et affecte des variables lorsque l'option fournie est définie.

Après vérification par rapport à l'instruction case, il exécute ensuite shift 1 , provoquant la valeur de ${2} (le deuxième argument fourni à un script) pour passer à la valeur de ${1} , et le répète par rapport au nouveau ${1} (qui était auparavant ${2} ) jusqu'à ${1} n'est défini sur rien.

Et voilà ! Voilà toutes les bases de l'utilisation des instructions de cas.

Conclusion

Les instructions case peuvent vous aider à écrire du code à la fois plus rapidement et plus efficacement. Ils contribuent également à rendre les choses plus lisibles et maintenables à long terme.

Si vous êtes nouveau sur Bash, vous pouvez apprendre les bases de Bash à partir de zéro dans notre série Bash pour débutants.

Vous avez des questions ou quelque chose ne fonctionne pas correctement ? N'hésitez pas à laisser un commentaire ci-dessous, et je ferai de mon mieux pour vous répondre !


Linux
  1. Utilisation de Bash pour l'automatisation

  2. Utilisation de l'exportation dans .bashrc ?

  3. 5 exemples d'instructions Bash Case

  4. Diviser la sortie de la commande par colonnes à l'aide de Bash ?

  5. Tableau dans Bash introuvable

Syntaxe de l'instruction bash case et exemples

Déclaration de cas bash

Script Bash - Instructions conditionnelles

Bash Scripting - Déclaration de cas

Bash Beginner Series #7 :Prise de décision avec des instructions If Else et Case Statements

Utilisation de Bash Sort pour trier les fichiers comme un patron