Unix / Linux - Variables spéciales

Dans ce chapitre, nous discuterons en détail des variables spéciales sous Unix. Dans l'un de nos chapitres précédents, nous avons compris comment être prudent lorsque nous utilisons certains caractères non alphanumériques dans les noms de variables. C'est parce que ces caractères sont utilisés dans les noms de variables Unix spéciales. Ces variables sont réservées à des fonctions spécifiques.

Par exemple, le $ le caractère représente le numéro d'identification du processus, ou PID, du shell actuel -

$echo $$

La commande ci-dessus écrit le PID du shell actuel -

29949

Le tableau suivant montre un certain nombre de variables spéciales que vous pouvez utiliser dans vos scripts shell -

N ° Sr. Variable et description
1

$0

Le nom de fichier du script actuel.

2

$n

Ces variables correspondent aux arguments avec lesquels un script a été appelé. Icin est un nombre décimal positif correspondant à la position d'un argument (le premier argument est $ 1, le deuxième argument est $ 2, et ainsi de suite).

3

$#

Le nombre d'arguments fournis à un script.

4

$*

Tous les arguments sont entre guillemets. Si un script reçoit deux arguments, $ * équivaut à $ 1 $ 2.

5

[email protected]

Tous les arguments sont individuellement entre guillemets. Si un script reçoit deux arguments, $ @ équivaut à $ 1 $ 2.

6

$?

L'état de sortie de la dernière commande exécutée.

sept

$$

Le numéro de processus du shell actuel. Pour les scripts shell, il s'agit de l'ID de processus sous lequel ils s'exécutent.

8

$!

Le numéro de processus de la dernière commande d'arrière-plan.

Arguments de ligne de commande

Les arguments de ligne de commande $ 1, $ 2, $ 3, ... $ 9 sont des paramètres de position, avec $ 0 pointant vers la commande, le programme, le script shell ou la fonction réelle et $ 1, $ 2, $ 3, ... $ 9 comme arguments du commander.

Le script suivant utilise diverses variables spéciales liées à la ligne de commande -

#!/bin/sh

echo "File Name: $0"
echo "First Parameter : $1"
echo "Second Parameter : $2"
echo "Quoted Values: [email protected]"
echo "Quoted Values: $*"
echo "Total Number of Parameters : $#"

Voici un exemple d'exécution pour le script ci-dessus -

$./test.sh Zara Ali
File Name : ./test.sh
First Parameter : Zara
Second Parameter : Ali
Quoted Values: Zara Ali
Quoted Values: Zara Ali
Total Number of Parameters : 2

Paramètres spéciaux $ * et $ @

Il existe des paramètres spéciaux qui permettent d'accéder à tous les arguments de ligne de commande à la fois. $* et [email protected] les deux agiront de la même manière sauf s'ils sont entre guillemets, "".

Les deux paramètres spécifient les arguments de ligne de commande. Cependant, le paramètre spécial "$ *" prend la liste entière comme un argument avec des espaces entre et le paramètre spécial "$ @" prend la liste entière et la sépare en arguments séparés.

Nous pouvons écrire le script shell comme indiqué ci-dessous pour traiter un nombre inconnu d'arguments de ligne de commande avec les paramètres spéciaux $ * ou $ @ -

#!/bin/sh

for TOKEN in $*
do
   echo $TOKEN
done

Voici un exemple d'exécution pour le script ci-dessus -

$./test.sh Zara Ali 10 Years Old
Zara
Ali
10
Years
Old

Note - Ici do...done est une sorte de boucle qui sera abordée dans un tutoriel ultérieur.

État de sortie

le $? La variable représente l'état de sortie de la commande précédente.

L'état de sortie est une valeur numérique renvoyée par chaque commande une fois terminée. En règle générale, la plupart des commandes renvoient un statut de sortie de 0 si elles ont réussi et de 1 si elles ont échoué.

Certaines commandes renvoient des états de sortie supplémentaires pour des raisons particulières. Par exemple, certaines commandes différencient les types d'erreurs et renverront diverses valeurs de sortie en fonction du type spécifique de défaillance.

Voici l'exemple d'une commande réussie -

$./test.sh Zara Ali
File Name : ./test.sh
First Parameter : Zara
Second Parameter : Ali
Quoted Values: Zara Ali
Quoted Values: Zara Ali
Total Number of Parameters : 2
$echo $?
0
$