<Précédent | Table des matières | Suivant>
Exécution de plusieurs actions
Dans les versions de bash avant 4.0, maisons n'autorisait qu'une seule action à effectuer sur un match réussi. Après une correspondance réussie, la commande se terminerait. Ici, nous voyons un script qui teste un personnage :
#! / Bin / bash
# case4-1 : tester un personnage
read -n 1 -p "Tapez un caractère > " echo
cas $REPLY dans
[[:upper:]]) echo "'$REPLY' est en majuscule." ;;
[[:lower:]]) echo "'$REPLY' est en minuscule." ;;
[[:alpha:]]) echo "'$REPLY' est alphabétique." ;;
[[:digit:]]) echo "'$REPLY' est un chiffre." ;; [[:graph:]]) echo "'$REPLY' est un caractère visible." ;;
[[:punct:]]) echo "'$REPLY' est un symbole de ponctuation." ;; [[:space:]]) echo "'$REPLY' est un caractère d'espacement." ;; [[:xdigit:]]) echo "'$REPLY' est un chiffre hexadécimal." ;;
Esac
#! / Bin / bash
# case4-1 : tester un personnage
read -n 1 -p "Tapez un caractère > " echo
cas $REPLY dans
[[:upper:]]) echo "'$REPLY' est en majuscule." ;;
[[:lower:]]) echo "'$REPLY' est en minuscule." ;;
[[:alpha:]]) echo "'$REPLY' est alphabétique." ;;
[[:digit:]]) echo "'$REPLY' est un chiffre." ;; [[:graph:]]) echo "'$REPLY' est un caractère visible." ;;
[[:punct:]]) echo "'$REPLY' est un symbole de ponctuation." ;; [[:space:]]) echo "'$REPLY' est un caractère d'espacement." ;; [[:xdigit:]]) echo "'$REPLY' est un chiffre hexadécimal." ;;
Esac
L'exécution de ce script produit ceci :
[moi@linuxbox ~]$ cas4-1
Tapez un caractère > a
'a' est en minuscule.
[moi@linuxbox ~]$ cas4-1
Tapez un caractère > a
'a' est en minuscule.
Le script fonctionne pour la plupart, mais échoue si un caractère correspond à plus d'une des classes de caractères POSIX. Par exemple, le caractère « a » est à la fois en minuscule et alphabétique, ainsi qu'un chiffre hexadécimal. Dans bash avant la version 4.0, il n'y avait aucun moyen de maisons pour correspondre à plus d'un test. versions modernes de bash, ajoutez la notation ";;&" à
terminer chaque action, alors maintenant nous pouvons faire ceci:
#! / Bin / bash
# case4-2 : tester un personnage
read -n 1 -p "Tapez un caractère > " echo
cas $REPLY dans
[[:upper:]]) echo "'$REPLY' est en majuscule." ;;&
[[:lower:]]) echo "'$REPLY' est en minuscule." ;;&
[[:alpha:]]) echo "'$REPLY' est alphabétique." ;;&
[[:digit:]]) echo "'$REPLY' est un chiffre." ;;& [[:graph:]]) echo "'$REPLY' est un caractère visible." ;;&
[[:punct:]]) echo "'$REPLY' est un symbole de ponctuation." ;;& [[:space:]]) echo "'$REPLY' est un caractère d'espacement." ;;& [[:xdigit:]]) echo "'$REPLY' est un chiffre hexadécimal." ;;&
Esac
#! / Bin / bash
# case4-2 : tester un personnage
read -n 1 -p "Tapez un caractère > " echo
cas $REPLY dans
[[:upper:]]) echo "'$REPLY' est en majuscule." ;;&
[[:lower:]]) echo "'$REPLY' est en minuscule." ;;&
[[:alpha:]]) echo "'$REPLY' est alphabétique." ;;&
[[:digit:]]) echo "'$REPLY' est un chiffre." ;;& [[:graph:]]) echo "'$REPLY' est un caractère visible." ;;&
[[:punct:]]) echo "'$REPLY' est un symbole de ponctuation." ;;& [[:space:]]) echo "'$REPLY' est un caractère d'espacement." ;;& [[:xdigit:]]) echo "'$REPLY' est un chiffre hexadécimal." ;;&
Esac
Lorsque nous exécutons ce script, nous obtenons ceci :
[moi@linuxbox ~]$ cas4-2
Tapez un caractère > a 'a' est en minuscule. 'a' est alphabétique.
'a' est un caractère visible. 'a' est un chiffre hexadécimal.
[moi@linuxbox ~]$ cas4-2
Tapez un caractère > a 'a' est en minuscule. 'a' est alphabétique.
'a' est un caractère visible. 'a' est un chiffre hexadécimal.
L'ajout de la syntaxe ";;&" permet à case de passer au test suivant plutôt que de simplement terminer.