GNU/Linux >> Tutoriels Linux >  >> Linux

5 exemples d'instructions Bash Case

L'instruction case du shell bash est similaire à l'instruction switch en C. Elle peut être utilisée pour tester des valeurs simples comme des entiers et caractères.

L'instruction case n'est pas une boucle, elle n'exécute pas un bloc de code n fois. Au lieu de cela, bash shell vérifie la condition et contrôle le déroulement du programme.

Dans cet article, passons en revue la commande bash case avec 5 exemples pratiques.

La construction case dans bash shell nous permet de tester des chaînes par rapport à des modèles pouvant contenir des caractères génériques. L'instruction bash case est la forme la plus simple de l'instruction bash if-then-else.

Syntaxe de l'instruction bash case.

case expression in
    pattern1 )
        statements ;;
    pattern2 )
        statements ;;
    ...
esac

Voici les points clés des déclarations de cas bash :

  • La déclaration de cas développe d'abord l'expression et essaie de la faire correspondre à chaque modèle.
  • Lorsqu'une correspondance est trouvée, toutes les instructions associées jusqu'au double point-virgule (;;) sont exécutées.
  • Après la première correspondance, le cas se termine avec le statut de sortie de la dernière commande exécutée.
  • S'il n'y a pas de correspondance, le statut de sortie du dossier est zéro.

Exemple de cas bash 1. Envoi d'un signal à un processus

Le script suivant accepte le numéro de signal et l'identifiant de processus comme arguments, et envoie le signal à un identifiant de processus donné en utilisant le nom du signal.

Ce script sert à démontrer l'utilisation de l'instruction case.

$ cat signal.sh
#!/bin/bash

if [ $# -lt 2 ]
then
        echo "Usage : $0 Signalnumber PID"
        exit
fi

case "$1" in

1)  echo "Sending SIGHUP signal"
    kill -SIGHUP $2
    ;;
2)  echo  "Sending SIGINT signal"
    kill -SIGINT $2
    ;;
3)  echo  "Sending SIGQUIT signal"
    kill -SIGQUIT $2
    ;;
9) echo  "Sending SIGKILL signal"
   kill -SIGKILL $2
   ;;
*) echo "Signal number $1 is not processed"
   ;;
esac

Dans l'exemple ci-dessus :

  • $1 et $2 sont respectivement le numéro de signal et l'identifiant de processus.
  • En utilisant la commande kill, il envoie le signal correspondant à l'ID de processus donné.
  • Il exécute la commande sleep pendant un certain nombre de secondes.
  • La dernière comparaison facultative *) est un cas par défaut et qui correspond à n'importe quoi.

Utilisation du script shell ci-dessus :découvrez l'identifiant de processus de la commande sleep et envoyez un signal d'arrêt à cet identifiant de processus pour tuer le processus.

$ sleep 1000

$ ps -a | grep sleep
23277 pts/2    00:00:00 sleep

$ ./signal.sh 9 23277
Sending SIGKILL signal

$ sleep 1000
Killed

Reportez-vous également à notre précédent article kill - 4 méthodes pour tuer un processus.

Exemple de cas bash. 2. Correspondance de modèle dans un fichier

Cet exemple imprime le nombre de lignes, le nombre de mots et supprime les lignes qui correspondent au modèle donné.

$ cat fileop.sh
#!/bin/bash

# Check 3 arguments are given #
if [ $# -lt 3 ]
then
        echo "Usage : $0 option pattern filename"
        exit
fi

# Check the given file is exist #
if [ ! -f $3 ]
then
        echo "Filename given \"$3\" doesn't exist"
        exit
fi

case "$1" in

# Count number of lines matches
-i) echo "Number of lines matches with the pattern $2 :"
    grep -c -i $2 $3
    ;;
# Count number of words matches
-c) echo "Number of words matches with the pattern $2 :"
    grep -o -i $2 $3 | wc -l
    ;;
# print all the matched lines
-p) echo "Lines matches with the pattern $2 :"
    grep -i $2 $3
    ;;
# Delete all the lines matches with the pattern
-d) echo "After deleting the lines matches with the pattern $2 :"
    sed -n "/$2/!p" $3
    ;;
*) echo "Invalid option"
   ;;
esac

L'exécution du script ci-dessus est illustrée ci-dessous.

$ cat text
Vim is a text editor released by Bram Moolenaar in 1991 for the Amiga computer.
The name "Vim" is an acronym for "Vi IMproved" because Vim was created as an extended version of the vi editor, with many additional features designed to be helpful in editing program source code.
Although Vim was originally released for the Amiga, Vim has since been developed to be cross-platform, supporting many other platforms.
It is the most popular editor amongst Linux Journal readers.

Sortie de regex de cas bash. Après suppression des lignes correspond au pattern Vim :

$ ./fileop.sh  -d Vim text
It is the most popular editor amongst Linux Journal readers.

Reportez-vous également à notre article précédent sur Bash ~ expansaion et { } expansion.

Exemple de cas bash 3. Rechercher le type de fichier à partir de l'extension

Cet exemple imprime le type d'un fichier (texte, Csource, etc.) en fonction de l'extension du nom de fichier.

$ cat filetype.sh
#!/bin/bash
for filename in $(ls)
do
	# Take extension available in a filename
        ext=${filename##*\.}
        case "$ext" in
        c) echo "$filename : C source file"
           ;;
        o) echo "$filename : Object file"
           ;;
        sh) echo "$filename : Shell script"
            ;;
        txt) echo "$filename : Text file"
             ;;
        *) echo " $filename : Not processed"
           ;;
esac
done

$ ./filetype.sh
a.c : C source file
b.c : C source file
c1.txt : Text file
fileop.sh : Shell script
obj.o : Object file
text : Not processed
t.o : Object file

Exemple de cas bash 4. Inviter l'utilisateur avec Oui ou Non

Dans la plupart des installations de logiciels, lors de l'accord de licence, il demandera oui ou non à l'utilisateur. L'extrait de code suivant est l'un des moyens d'obtenir l'entrée oui ou non de l'utilisateur.

$ cat yorno.sh
#!/bin/bash

echo -n "Do you agree with this? [yes or no]: "
read yno
case $yno in

        [yY] | [yY][Ee][Ss] )
                echo "Agreed"
                ;;

        [nN] | [n|N][O|o] )
                echo "Not agreed, you can't proceed the installation";
                exit 1
                ;;
        *) echo "Invalid input"
            ;;
esac

$ ./yorno.sh
Do you agree with this? [yes or no]: YES
Agreed

S'il existe plusieurs modèles séparés par des barres verticales, l'expression peut correspondre à n'importe lequel d'entre eux afin que les instructions associées soient exécutées. Les modèles sont vérifiés dans l'ordre jusqu'à ce qu'une correspondance soit trouvée; si aucun n'est trouvé, rien ne se passe.

Reportez-vous également à notre article précédent sur les 15 exemples de tableaux bash.

Exemple de cas bash 5. Script de démarrage

Les scripts de démarrage du répertoire /etc/init.d utilisent l'instruction case pour démarrer et arrêter l'application.

Vous pouvez utiliser n'importe quel type de modèles, mais il est toujours recommandé d'utiliser l'instruction case lorsque vous testez des valeurs de primitives. (c'est-à-dire des entiers ou des caractères).

$ cat startpcapp
#!/bin/bash

case "$1" in
'start')
echo "Starting application"
/usr/bin/startpc
;;
'stop')
echo "Stopping application"
/usr/bin/stoppc
;;
'restart')
echo "Usage: $0 [start|stop]"
;;
esac

$ ./startpcapp start
Starting application
/usr/bin/startpc started

Lecture recommandée

Bash 101 Hacks, par Ramesh Natarajan . Je passe la plupart de mon temps sur l'environnement Linux. Donc, naturellement, je suis un grand fan de la ligne de commande Bash et des scripts shell. Il y a 15 ans, lorsque je travaillais sur différentes versions de *nix, j'écrivais beaucoup de code sur le shell C et le shell Korn. Des années plus tard, lorsque j'ai commencé à travailler sur Linux en tant qu'administrateur système, j'ai pratiquement automatisé toutes les tâches possibles à l'aide de scripts shell Bash. Sur la base de mon expérience avec Bash, j'ai écrit le livre électronique Bash 101 Hacks qui contient 101 exemples pratiques sur la ligne de commande Bash et les scripts shell. Si vous songez à maîtriser Bash, rendez-vous service et lisez ce livre, qui vous aidera à prendre le contrôle de votre ligne de commande Bash et de vos scripts shell.


Linux
  1. Utilisation des déclarations de cas dans Bash

  2. Instruction Bash If-Else avec des exemples

  3. 6 Exemples d'expressions conditionnelles Bash ( -e, -eq, -z, !=, [, [[ ..)

  4. 4 Exemples d'instructions Bash If ( If then fi, If then else fi, If elif else fi, Nested if )

  5. Bash for loop Exemples

Déclaration de cas bash

Instruction Bash if..else

35 exemples de scripts bash

Bash Scripting - Déclaration de cas

Comment travailler avec l'instruction Case dans les scripts Bash

Syntaxe Bash If Else avec exemples