Dans le cadre de notre série de tutoriels bash en cours, nous avons discuté des paramètres de position bash dans notre article précédent. Dans cet article, discutons des paramètres spéciaux bash avec quelques exemples pratiques de script shell.
Certains des paramètres spéciaux bash dont nous parlerons dans cet article sont :$*, $@, $#, $$, $!, $?, $-, $_
Pour accéder à toute la liste des paramètres positionnels, les deux paramètres spéciaux $* et $@ sont disponibles. En dehors des guillemets doubles, ces deux sont équivalents :les deux se développent dans la liste des paramètres de position commençant par $1 (séparés par des espaces).
À l'intérieur des guillemets doubles, cependant, ils diffèrent :$* dans une paire de guillemets doubles équivaut à la liste des paramètres positionnels, séparés par le premier caractère de l'IFS « $1c$2c$3… ».
$@ entre guillemets doubles équivaut à la liste des paramètres positionnels, séparés par des espaces sans guillemets, c'est-à-dire "$1" "$2″.."$N".
Exemple 1 :Utiliser Bash $* et $@ pour développer les paramètres positionnels
Cet exemple montre la valeur disponible dans $* et $@.
Commencez par créer expan.sh comme indiqué ci-dessous.
$ cat expan.sh #!/bin/bash export IFS='-' cnt=1 # Printing the data available in $* echo "Values of \"\$*\":" for arg in "$*" do echo "Arg #$cnt= $arg" let "cnt+=1" done cnt=1 # Printing the data available in $@ echo "Values of \"\$@\":" for arg in "$@" do echo "Arg #$cnt= $arg" let "cnt+=1" done
Ensuite, exécutez expan.sh comme indiqué ci-dessous pour voir comment $* et $@ fonctionnent.
$ ./expan.sh "This is" 2 3 Values of "$*": Arg #1= This is-2-3 Values of "$@": Arg #1= This is Arg #2= 2 Arg #3= 3
- Le script ci-dessus a exporté la valeur d'IFS (Internal Field Separator) avec le '-'.
- Il y a trois paramètres passés au script expan.sh $1=”This is”,$2=”2″ et $3=”3″.
- Lors de l'impression de chaque valeur du paramètre spécial "$*", il ne donne qu'une seule valeur qui est l'ensemble du paramètre positionnel délimité par IFS.
- Alors que "$@" vous donne chaque paramètre sous la forme d'un mot séparé.
Exemple 2 :Utiliser $# pour compter les paramètres positionnels
$# est le paramètre spécial de bash qui vous donne le nombre de paramètres de position en décimal.
Tout d'abord, créez le fichier arithmetic.sh comme indiqué ci-dessous.
$ cat arithmetic.sh #!/bin/bash if [ $# -lt 2 ] then echo "Usage: $0 arg1 arg2" exit fi echo -e "\$1=$1" echo -e "\$2=$2" let add=$1+$2 let sub=$1-$2 let mul=$1*$2 let div=$1/$2 echo -e "Addition=$add\nSubtraction=$sub\nMultiplication=$mul\nDivision=$div\n"
Si le nombre de paramètres de position est inférieur à 2, il lancera les informations d'utilisation comme indiqué ci-dessous,
$ ./arithemetic.sh 10 Usage: ./arithemetic.sh arg1 arg2
Exemple 3 :Paramètres liés au processus – $$ et $ !
Le paramètre spécial $$ donnera l'ID de processus du shell. $ ! vous donne l'ID de processus du processus d'arrière-plan le plus récemment exécuté.
Le script suivant imprime l'identifiant de processus du shell et l'identifiant du dernier processus d'arrière-plan exécuté.
$ cat proc.sh #!/bin/bash echo -e "Process ID=$$" sleep 1000 & echo -e "Background Process ID=$!"
Maintenant, exécutez le script ci-dessus et vérifiez l'identifiant du processus qui l'imprime.
$ ./proc.sh Process ID=9502 Background Process ID=9503 $ ps PID TTY TIME CMD 5970 pts/1 00:00:00 bash 9503 pts/1 00:00:00 sleep 9504 pts/1 00:00:00 ps $
Exemple 4 :Autres paramètres spéciaux de Bash – $ ?, $-, $_
- $ ? Donne l'état de sortie de la dernière commande exécutée.
- $- Options définies à l'aide de la commande intégrée set
- $_ Donne le dernier argument à la commande précédente. Au démarrage du shell, il donne le nom de fichier absolu du script shell en cours d'exécution.
$ cat others.sh #!/bin/bash echo -e "$_"; ## Absolute name of the file which is being executed /usr/local/bin/dbhome # execute the command. #check the exit status of dbhome if [ "$?" -ne "0" ]; then echo "Sorry, Command execution failed !" fi echo -e "$-"; #Set options - hB echo -e $_ # Last argument of the previous command.
Dans le script ci-dessus, la dernière instruction echo "echo -e $_" ($ underscore) imprime également hB qui est la valeur du dernier argument de la commande précédente. Donc $_ donnera la valeur après expansion
$ ./others.sh ./others.sh /home/oracle Sorry, Command execution failed ! hB hB