Les variables spéciales shell sous Linux
Sommaire
- I. Présentation
- II. Détail des variables
- A. Afficher l'ensemble des paramètres passés en une seule fois
- B. Afficher les paramètres un à un
- C. Revoir la sortie de la dernière commande passée
- D. Vérifier la bonne exécution d'une commande
- E. Récupérer le nombre d'arguments passés
- F. Avoir la nom du script ou de la commande actuelle
- G. Afficher le numéro de processus du shell actuel
I. Présentation
Dans ce tutoriel, nous allons nous attarder sur les variables spéciales shell. Ces variables servent dans la plupart du temps dans les scripts bash car ils permettent de récupérer des informations sur les arguments passés ou sur l'exécution en cours.
On utilisera ces variables spéciales dans nos scripts, la plupart du temps par un affichage avec "echo" ou pour le traitement des données et paramètres d'un script. Les variables spéciales se compose toujours de deux caractères, le premier est "$" est le deuxième varie en fonction de la variable et du résultat voulu par exemple "$*" ou "$1".
Pour tous le tutoriel, on considérera qu'on à un script "script.sh" contenant la trame suivante :
#!/bin/bash echo "Arg = < variable spéciale >" ;
Nous passerons ainsi divers paramètres pour tester leurs fonctionnements. On exécutera ce script via la commande suivante :
bash script.sh
Il nous faudra bien sur avant le passer en exécutable :
chmod +x script.sh
II. Détail des variables
Nous allons maintenant étudier ces différentes variables spéciales ainsi que présenter leurs contextes d'utilisation et leurs utilités.
A. Afficher l'ensemble des paramètres passés en une seule fois
Il est possible d'afficher tous les arguments de notre script. On aura ainsi une liste exhaustive de ceux ci avec la variable spéciale suivante :
$*
Si on passe les paramètres "12", "abc" et "def" :
On peut par exemple utiliser cette variable pour compter et/ou analyser l'ensemble des paramètres. Ici, on affiche ce teste comme suivant :
echo "Arg * = $*";
On peut également pour cela utiliser la variable "$@". La seule différence entre les deux est que "$@" doit être entre guillemets (" ") pour être affichée alors que "$*" n'en à pas besoin.
B. Afficher les paramètres un à un
On peut bien sur pour faciliter le traitement n'afficher que les paramètres voulus ou alors les paramètres un à un. On utilisera pour cela la syntaxe suivante :
echo "$1" # Afficher le premier paramètre passé echo "$2" # Afficher le seconde paramètre passé
Pour les paramètres qui dépassent le numéro 9, on utilisera une syntaxe un peu différente :
echo "${10}" # Afficher le dixième paramètre
C. Revoir la sortie de la dernière commande passée
On peut vouloir pour certaines raisons revoir la sortie de la dernière commande passée. On utilisera pour cela la variable spéciale suivante :
$_
Dans un shell simple on verra cette exécution :
D. Vérifier la bonne exécution d'une commande
Cette variable est très intéressante et peut être très utile. Dans un script, elle peut par exemple nous aider à déterminer si la commande passée juste avant s'est bien déroulée ou non et d'agir en conséquence si on le souhaite.
Par exemple si on exécute la commande suivante :
mkdir /home/neoflow/dossier1/
Puis que l'on affiche cette variable spéciale :
echo "$?"
On pourra voir que si la commande s'est bien déroulée, la variable sera à "0" et si la commande s'est mal passée, elle sera à "1" ou "2". Ainsi dans notre cas, si la variable n'est pas à "0". On pourra en déduire que le dossier n'existe pas ou qu'il n'a pas les droits d'accès.
Il sera alors possible d'en avertir l'utilisateur ou faire une action avec une condition comme suivant :
mkdir /home/neoflow/dossier1/ if [ $? == 0 ]; then echo "Le dossier existe bien ! On peut continuer" ; else echo "Le dossier n'existe pas, créons le ..." ; mkdir -p /home/neoflow/dossier1 fi
E. Récupérer le nombre d'arguments passés
Il peut aussi être utile de vouloir récupérer le nombre d'arguments qui ont été passés au script que nous exécutons. On utilisera pour cela la variable spéciale suivante :
$#
Nous pourrons aussi l'afficher comme ceci :
echo "Il y a $# argument(s) passé(s)" ;
Nous avons alors un simple résultat en chiffre :
F. Avoir la nom du script ou de la commande actuelle
On peut utiliser une variable spéciale pour afficher le nom du script qui lance la commande ou qui s'exécute actuellement avec la variable spéciale suivante :
$0
Avec notre exemple, nous aurons la sortie suivante :
G. Afficher le numéro de processus du shell actuel
On peut également récupérer le numéro de processus du shell actuel avec la variable spéciale suivante :
$$
On aura alors en résultat le PID, souvent sur 4 chiffres :
Les variables présentent peuvent être très utiles même sur leurs utilisation reste assez spécifique à une situation. Elles sont toujours bonnes à connaitre en cas de besoin.