GNU/Linux >> Tutoriels Linux >  >> Linux

Paramètres spéciaux de Bash expliqués avec 4 exemples de scripts Shell

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

Linux
  1. Quels sont les paramètres/variables spéciaux du shell (bash) ?

  2. Partage de variables sur plusieurs scripts shell ?

  3. Paramètres de ligne de commande dans les scripts shell

  4. Portée variable pour les scripts shell bash et les fonctions dans le script

  5. Exécutez tous les scripts shell dans le dossier

Bash Scripting - Variables expliquées avec des exemples

Bash Scripting - Commande Printf expliquée avec des exemples

Bash Scripting - Tableau associatif expliqué avec des exemples

Comment créer des documents avec des scripts Bash

Comment utiliser la commande echo dans les scripts Bash sous Linux

Apprenez les scripts Bash multi-threading avec GNU Parallel