Différences entre versions de « Introduction aux scripts de l'interpréteur BASH »

De POLR
Sauter à la navigation Sauter à la recherche
Ligne 26 : Ligne 26 :
 
Pour exécuter ce script, il faut tout d’abord le rendre exécutable:
 
Pour exécuter ce script, il faut tout d’abord le rendre exécutable:
  
  $> ls -l exemple.sh
+
  -bash-3.2$ ls -l exemple.sh
 
  -rw-r--r--. 1 caveenj users 289 nov  2 20:20 exemple.sh
 
  -rw-r--r--. 1 caveenj users 289 nov  2 20:20 exemple.sh
  $> chmod +x exemple.txt
+
  -bash-3.2$ chmod +x exemple.txt
  $> ls -l exemple.sh
+
  -bash-3.2$ ls -l exemple.sh
 
  -rwxr-xr-x. 1 caveenj users 289 nov  2 20:20 exemple.sh
 
  -rwxr-xr-x. 1 caveenj users 289 nov  2 20:20 exemple.sh
  $> ./exemple.sh bonjour tout le monde  
+
  -bash-3.2$ ./exemple.sh bonjour tout le monde  
 
  Le nombre de parametres est:  4  
 
  Le nombre de parametres est:  4  
 
  Les parametres sont : bonjour tout le monde  
 
  Les parametres sont : bonjour tout le monde  
Ligne 41 : Ligne 41 :
 
  6  
 
  6  
 
  Votre nombre est :  6  
 
  Votre nombre est :  6  
  $>
+
  -bash-3.2$
  
 
Nous pouvons utiliser la redirection des entrées-sorties avec les scripts:
 
Nous pouvons utiliser la redirection des entrées-sorties avec les scripts:
  
  $> echo 6 | ./exemple.sh bonjour tout le monde
+
  -bash-3.2$ echo 6 | ./exemple.sh bonjour tout le monde
  
 
donnera le même résultat sans attendre qu'on fournisse un nombre à partir du clavier.
 
donnera le même résultat sans attendre qu'on fournisse un nombre à partir du clavier.
Ligne 66 : Ligne 66 :
  
 
;$$:Cette variable contient le numéro du processus qui exécute le script. En effet, sous UNIX,à chaque fois qu'on lance un programme (ou un script), un nouveau processus est créé auquel le système d'exploitation attrbue un identifiant unique, le numéro de processus (ou PID). Ce numéro étant unique, on peut l'utiliser dans un script pour créer un fichier ou répertoire temporaire en ajoutant ''$$'' au nom du fichier/répertoire à créer: ''mkdir travail_$$''.
 
;$$:Cette variable contient le numéro du processus qui exécute le script. En effet, sous UNIX,à chaque fois qu'on lance un programme (ou un script), un nouveau processus est créé auquel le système d'exploitation attrbue un identifiant unique, le numéro de processus (ou PID). Ce numéro étant unique, on peut l'utiliser dans un script pour créer un fichier ou répertoire temporaire en ajoutant ''$$'' au nom du fichier/répertoire à créer: ''mkdir travail_$$''.
 +
 +
== Les énoncés de contrôle ==
 +
 +
=== Énoncé if-then-else ===
 +
 +
Les scripts bash peuvent exécuter des branchements selon une condition :
 +
 +
if [ ''test'' ]
 +
then
 +
      commandes à exécuter si ''test'' est vrai
 +
else
 +
      commandes à exécuter si ''test'' est faux
 +
fi
 +
 +
La condition (''test'') à évaluer peut impliquer les propriétés de fichiers ou répertoires, ou bien simplement être une comparaison de nombres ou de chaînes de caractères.
 +
 +
'''Attention''' : Le caractère ‘[‘ utilisé ici est en fait une commande (''/usr/bin/['') servant à évaluer l’expression ''test''. Il faut donc mettre des espaces (blancs) avant et après les symboles ‘[‘ et ‘]’ .
 +
 +
Voici quelques conditions très utilisées:
 +
 +
;-s fichier:retourne vrai si  fichier existe et est non vide
 +
;-f fichier:retourne vrai si fichier est un fichier ordinaire
 +
;-d fichier:retourne vrai si fichier est un répertoire
 +
;-r fichier:retourne vrai si on peut lire fichier
 +
;-w fichier:retourne vrai si on peut écrire dans fichier
 +
;-x fichier:retourne vrai si fichier est exécutable
 +
;$X -eq $Y:vrai si X est égal à Y
 +
;$X -ne $Y:vrai si X n’est pas égal à Y
 +
;$X -lt $Y:vrai si X est plus petit que Y
 +
;$X -gt $Y:vrai si X est plus grand que Y
 +
;$X -le $Y:vrai si X est plus petit ou égal Y
 +
;$X -ge $Y:vrai si X est plus grand ou égal à Y
 +
;"$A" = "$B":vrai si la chaîne A est égale à la chaîne B
 +
;"$A" != "$B":vrai si la chaîne A n’est pas égale à la chaîne B
 +
;$X ! -gt $Y:vrai si X n’est pas plus grand que Y (c.a.d., ! inverse le résultat de la relation)
 +
;$E -a $F:vrai si  E et F sont tous les deux vrai (ET)
 +
;$E -o $F:vrai si  E ou F est vrai (OU)

Version du 11 juin 2013 à 15:02

Un petit script simple

Voici un petit script exemple.sh qui sera exécuté par l’interpréteur de commande bash. Le script a été créé à l’aide d’un éditeur de texte tel gedit ou vi.

#!/bin/bash
#fichier exemple.sh
# ceci est un commentaire
echo "Le nombre de parametres est: "  $#
echo "Les parametres sont :" $*
echo ' Les paramtetres sont aussi disponible comme ceci : ' $@ 
echo "Le parametre numero 1 est : " $1
echo "Le parametre numero 12 est : " ${12}
echo "Mon numero de processus (PID) est: " $$
echo "Entrez un nombre au clavier: "
read nombre
echo "Votre nombre est : " ${nombre:-nul}

Explication du script

Le script débute avec la ligne #!/bin/bash. Normalement, ‘ # ’ indique le début d’un commentaire. Cependant, la séquence ‘#!’ au début d’un script indique à Linux d’utiliser le programme spécifié, ici, l’interpréteur de commandes /bin/bash pour interpréter et exécuter les commandes qui suivent.

Les paramètres passés au script sont disponibles via les variables $1, $2, ... $9. $* et $@ représentent la liste de tous les paramètres passés au script alors que $# contient le nombre de paramètres. La variable $$ contient le numéro du processus qui exécute le script (résultat d’un fork et exec).

L’énoncé read nombre attend une entrée de l’entrée standard (habituellement le clavier) et attribue la valeur fournie à la variable nombre. Pour utiliser le contenu de la variable nombre, on peut utiliser la syntaxe $nombre ou bien ${nombre}. On peut aussi attribuer une valeur par défaut à la variable nombre si aucune valeur n’a été fournie au clavier: dans cet exemple, si aucune valeur n’est fournie, la variable nombre prend pour valeur nul.

Pour exécuter ce script, il faut tout d’abord le rendre exécutable:

-bash-3.2$ ls -l exemple.sh
-rw-r--r--. 1 caveenj users 289 nov  2 20:20 exemple.sh
-bash-3.2$ chmod +x exemple.txt
-bash-3.2$ ls -l exemple.sh
-rwxr-xr-x. 1 caveenj users 289 nov  2 20:20 exemple.sh
-bash-3.2$ ./exemple.sh bonjour tout le monde 
Le nombre de parametres est:  4 
Les parametres sont : bonjour tout le monde 
Les paramtetres sont aussi disponible comme ceci : bonjour tout le monde 
Le parametre numero 1 est :  bonjour 
Le parametre numero 12 est :
Mon numero de processus (PID) est:  3576 
Entrez un nombre au clavier: 
6 
Votre nombre est :  6 
-bash-3.2$

Nous pouvons utiliser la redirection des entrées-sorties avec les scripts:

-bash-3.2$ echo 6 | ./exemple.sh bonjour tout le monde

donnera le même résultat sans attendre qu'on fournisse un nombre à partir du clavier.

Récapitulatif des variables spéciales d'un script

#!/bin/bash
Syntaxe donnant le nom de l'interpréteur de commande à utiliser pour exécuter le script. Cet énoncé doit se trouver sur la première ligne du script.
$#
Contient le nombre de paramètres (ou arguments) que l'utilisateur a fourni lors de l'appel du script. Si on appelle le script exemple.sh de la façon suivante: exemple.sh a b c d, $# aura pour valeur 4 et l'appel exemple.sh a b c d e f donnera à $# la valeur 6.
$1
Contient la valeur du premier argument. L'appel exemle.sh a b c d attribue la valeur a à $1.
$2
Contient la valeur du deuxième argument. L'appel exemle.sh a b c d attribue la valeur b à $2.
$3, $4,...$n
Comme précédemment pour les paramètres 3,4,...n.
$* ou $@
Ces variables contiennent la liste complète des arguments passés au script. Par exemple, si on lance la commande exemple.sh a b c d e f, la variable $* aura pour valeur a b c d e f.
$0
Cette variable contient le nom du script, tel qu'il a été invoqué pour son exécution. Si on exécute notre script avec l'appel suivant: ./exemple.sh la variable $0 aura pour valeur ./exemple.sh.
$$
Cette variable contient le numéro du processus qui exécute le script. En effet, sous UNIX,à chaque fois qu'on lance un programme (ou un script), un nouveau processus est créé auquel le système d'exploitation attrbue un identifiant unique, le numéro de processus (ou PID). Ce numéro étant unique, on peut l'utiliser dans un script pour créer un fichier ou répertoire temporaire en ajoutant $$ au nom du fichier/répertoire à créer: mkdir travail_$$.

Les énoncés de contrôle

Énoncé if-then-else

Les scripts bash peuvent exécuter des branchements selon une condition :

if [ test ]
then
     commandes à exécuter si test est vrai
else
     commandes à exécuter si test est faux
fi

La condition (test) à évaluer peut impliquer les propriétés de fichiers ou répertoires, ou bien simplement être une comparaison de nombres ou de chaînes de caractères.

Attention : Le caractère ‘[‘ utilisé ici est en fait une commande (/usr/bin/[) servant à évaluer l’expression test. Il faut donc mettre des espaces (blancs) avant et après les symboles ‘[‘ et ‘]’ .

Voici quelques conditions très utilisées:

-s fichier
retourne vrai si fichier existe et est non vide
-f fichier
retourne vrai si fichier est un fichier ordinaire
-d fichier
retourne vrai si fichier est un répertoire
-r fichier
retourne vrai si on peut lire fichier
-w fichier
retourne vrai si on peut écrire dans fichier
-x fichier
retourne vrai si fichier est exécutable
$X -eq $Y
vrai si X est égal à Y
$X -ne $Y
vrai si X n’est pas égal à Y
$X -lt $Y
vrai si X est plus petit que Y
$X -gt $Y
vrai si X est plus grand que Y
$X -le $Y
vrai si X est plus petit ou égal Y
$X -ge $Y
vrai si X est plus grand ou égal à Y
"$A" = "$B"
vrai si la chaîne A est égale à la chaîne B
"$A" != "$B"
vrai si la chaîne A n’est pas égale à la chaîne B
$X ! -gt $Y
vrai si X n’est pas plus grand que Y (c.a.d., ! inverse le résultat de la relation)
$E -a $F
vrai si E et F sont tous les deux vrai (ET)
$E -o $F
vrai si E ou F est vrai (OU)