18/12/2024

BashCommandes et Système

Les variables spéciales shell sous Linux

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" :

VarSpeShell01

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é

VarSpeShell02

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 :

VarSpeShell05

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 :

VarSpeShell03

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 :

VarSpeShell04

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 :

VarSpeShell06

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.

author avatar
Mickael Dorigny Co-founder
Co-fondateur d'IT-Connect.fr. Auditeur/Pentester chez Orange Cyberdéfense.
Partagez cet article Partager sur Twitter Partager sur Facebook Partager sur Linkedin Envoyer par mail

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.