Vous êtes sur la page 1sur 9

Les scripts shell:

Un shell n'est pas un simple interpréteur de commande mais il peut aussi exécuter des commandes
prises dans un fichier. Il existe plusieurs environnements console shell. Les principaux shells qui
existent :
sh : Bourne Shell. (Le shell original).
•bash : Bourne Again Shell. Une amélioration du Bourne Shell, disponible par défaut sous
Linux et Mac OS X.
•ksh : Korn Shell. Un shell puissant assez présent sur les Unix propriétaires, mais aussi
disponible en version libre, compatible avec bash.
•csh : C Shell. Un shell utilisant une syntaxe proche du langage C.
•tcsh : Tenex C Shell. Amélioration du C Shell.
•zsh : Z Shell. Shell assez récent reprenant les meilleures idées de bash, ksh et tcsh.

Un fichier contenant des commandes pour le shell ou un programme écrit dans le langage du shell
est appelé un script shell.
Un script shell peur comprendre des commandes, des variables et des structures de contrôle
(constructions conditionnelles et boucles).

Rendre un script shell exécutable


Pour que le shell sache comment interpréter le script, le code du script doit commencer par la ligne:
#!/bin/bash

La ligne " #!/bin/bash " indique que ce script doit être exécuté par le shell bash.
Le fichier contenant le script doit aussi être exécutable (bit "x" dans les permissions d’accès).
La commande chmod permet de modifier les permissions d'acces d'un fichier.
Pour rendre un fichier exécutable:
$ chmod u+x nom_du_fichier

Principes généraux des scripts shell


Un script shell est avant tout une succession de commandes.
Le programme script suivant permet d'afficher le répertoire de travail courant dans une ligne puis la
date système.

#!/bin/bash
pwd
date

Pour insérer des commentaires dans le script, il suffit de précéder chaque ligne de commentaire du
caractère "#". Exemple:

#!/bin/bash

# Ce qui est ici est un commentaire


pwd
date

echo : La commande echo sert à afficher du texte


#!/bin/bash

# Ce qui est ici est un commentaire

echo "Le répertoire de travail est:"


pwd
echo "Le date est:"
date

Les variables
Toute variable possède un nom et une valeur
<nom de la variable>=<la valeur de la variable>
Pour l'affichage d'une variable précéder son nom par le symbole dollar "$":
Exemple :
#!/bin/bash

i=10
echo " La valeur de la variable i est : $i"
message="Bonjour "
echo $message

read : La commande read permet de lire des variables. Elle demande à l'utilisateur de saisir du texte.
#!/bin/bash

read nom
echo " Bonjour $nom"

read permet aussi de lire plusieurs variables :


#!/bin/bash

read nom prenom


echo " Bonjour $nom $prenom"

Les back quotes ` `

En shell les back quotes indiques au shell d’exécuter ce qui trouve à l’intérieur :

Exemple :

#!/bin/bash

rep=`pwd`
echo "vous êtes dans le répertoire $rep"

La variable rep recevra comme valeur le résultat d’exécution de la commande pwd.


Par la suite, echo affiche le message :

vous êtes dans le répertoire /home/user

Les variables des paramètres


Les scripts bash peuvent accepter des paramètres comme toute autre commande.

Le scritp peut être appelé :

$ ./script.sh param1 param2 param3

$* donne tous les paramètres

$@ donne la liste des paramètres

$# donne le nombre de paramètres

$0 donne le nom de la commande

$1 donne le premier paramètre, $2, $3 …

Exemple:
#!/bin/bash

echo "Le nom du fichier script est : $0"


echo "Nombre de paramètres : $#"
echo "Le premier paramètre : $1"
echo "Le deuxième paramètre : $2"

Examiner une condition : if et case


La structure if
Le type de condition le plus courant est le if, qui signifie "si".

Si la condition est correcte exécuter des instructions si non exécuter d'autres instructions.

La syntaxe en bash est la suivante :

#!/bin/bash
i=10
if [ $i -lt 20 ]
then
echo "i est inférieur à 20 "
else
echo "i est supérieur ou égale à 20 "
fi

Il existe deux principales façons de réaliser des tests pour évaluer une expression. Ces deux
méthodes sont l'utilisation de la commande test, et l'utilisation des crochets :
•test expression
•[ expression ]

Syntaxe de test :
test condition

Les différents types de tests


Il est possible d’effectuer trois types de tests différents en bash :
•des tests sur des chaînes de caractères ;
•des tests sur des nombres ;
•des tests sur des fichiers.

Tests sur des chaînes de caractères

Condition Signification
Vérifie si les deux chaînes sont identiques. Notez que bash est
$chaine1 = $chaine2 sensible à la casse : « b » est donc différent de « B ».
Il est aussi possible d'écrire « == » pour les habitués du langage C.
$chaine1 != $chaine2 Vérifie si les deux chaînes sont différentes.
-z $chaine Vérifie si la chaîne est vide.
-n $chaine Vérifie si la chaîne est non vide.

Exemple :
#!/bin/bash

if [ -z $1]
then
echo "pas de paramètres "
else
echo "le paramètre 1 est : $1 "
fi

Tests sur des nombres

Les opérateurs sont les suivants :


•-eq (equal) : « égal à » (signe « = ») ;
•-ne (not equal) : « différent de » (signe « ≠ ») ;
•-gt (greater than) : « strictement supérieur à » (signe « > ») ;
•-lt (lesser than) : « strictement inférieur à » (signe « < ») ;
•-ge (greater or equal) : « supérieur ou égal à » (signe « ≥ ») ;
-le (lesser or equal) : « inférieur ou égal à » (signe « ≤ ») ;
Exemple :
#!/bin/bash

i=10
if test $i -lt 20
then
echo "i est inférieur à 20 "
else
echo "i est supérieur ou égale à 20 "
fi

Tests sur des fichiers

Une grande partie de la puissance du shell se déploie dans sa faculté de manipuler des fichiers.
Les principaux opérateurs disponibles sont :
•nature du fichier :
•-e (exists) : vérifie l'existence d'un fichier ;
•-f (file) : vérifie l'existence d'un fichier, et le fait qu'il s'agisse bien d'un fichier au
sens strict ;
•-d (directory) : vérifie l'existence d'un répertoire ;
•-L (link) : vérifie si le fichier est un lien symbolique ;
•attributs du fichier :
•-s (size) : vérifie qu'un fichier n'est pas vide ;
•droits sur le fichier :
•-r (readable) : vérifie si un fichier peut être lu ;
•-w (writable) : vérifie si un fichier peut être écrit ou modifié ;
•-x (writable) : vérifie si un fichier peut être exécuté ;
•comparaison de fichiers :
•-nt (newer than) : vérifie si un fichier est plus récent qu'un autre ;
•-ot (older than) : vérifie si un fichier est plus ancien qu'un autre.
Exemple :

#!/bin/bash

read -p 'Entrez un répertoire : ' repertoire

if [ -d $repertoire ]
then
echo "Le répertoire existe."
else
echo "Le répertoire n'existe pas."
fi
Opérateurs logiques
L'opérateur « ! »: Non
L'opérateur « && »: Et logique (l'opérateur « -a »)
L'operateu « || »: Ou logique (l'opérateur « -o »)

Exemple :
#!/bin/bash

if [ $# -ge 1 ] && [ $1 = 'Hello' ]


then
echo "le premier parametre est Hello "
echo "Il existe au moins un parametre"
fi

Exemple de Elseif

#!/bin/bash

if [ $# -eq 1 ]
then
echo "Il existe un paramètre"
elif [ $# -eq 2 ]
then
echo "Il existe deux paramètres"
elif [ $# -gt 2 ]
echo "Il existe plus que deux paramètres"
else
echo "Il n'existe aucun paramètre"
fi

La structure case
Case : tester plusieurs conditions à la fois

Exemple :
#!/bin/bash

case $1 in
0)
echo "le parametre 1 est egal à 0"
;;
1)
echo "le parametre 1 est egal à 1"
;;
*)
echo "Je ne connais pas le contenu du parametre 1
!"
;;
esac

Exemple :
#!/bin/bash

case $1 in
"Chien" | "Chat" | "Souris")
echo "C'est un mammifère"
;;
"Moineau" | "Pigeon")
echo "C'est un oiseau"
;;
*)
echo "Je ne sais pas ce que c'est"
;;
esac

expr : utilisé pour réaliser des opérations arithmétique


syntaxe : expr $nbr1 opérateur $nbr2

Opérateurs:

Opérateurs Signification
Opérateurs arithmétiques
$nb1 + $nb2 Addition
$nb1 - $nb2 Soustraction
$nb1 \* $nb2 Multiplication
$nb1 / $nb2 Division
$nb1 % $nb2 Modulo
Opérateurs de comparaison
$nb1 \> $nb2 VRAI si $nb1 est strictement supérieur à $nb2
$nb1 \>= $nb2 VRAI si $nb1 est supérieur ou égal à $nb2
$nb1 \< $nb2 VRAI si $nb1 est strictement inférieur à $nb2
$nb1 \<= $nb2 VRAI si $nb1 est inférieur ou égal à $nb2
$nb1 = $nb2 VRAI si $nb1 est égal à $nb2
$nb1 != $nb2 VRAI si $nb1 est diférent de $nb2
Opérateurs logiques
Opérateurs Signification
$chaine1 \& $chaine2 VRAI si les 2 chaines sont vraies
$chaine1 \| $chaine2 VRAI si l'une des 2 chaines est vraie
Opérateurs divers
-$nb1 Opposé de $nb1
\( expression \) Regroupement
$chaine : expression_reguliere Compare la chaine avec l'expression régulière

Exemple :

#!/bin/bash

i=`expr $1 + $2`
echo "$1 + $2 = $i"

Répéter une procédure: while et for


while : boucler « tant que »

#!/bin/bash

echo "Donner un entier entre 1 et 10 : "


read i

while [ $i -lt 1 ] || [ $i -gt 10 ]


do
read -p 'donner un entier entre 1 et 10 : ' i
done

for : boucler sur une liste de valeurs

Parcourir une liste de valeurs


La boucle for permet de parcourir une liste de valeurs et de boucler autant de fois qu'il y a de
valeurs.
Exemple :

#!/bin/bash

listedefichiers=`ls`

for fichier in $listedefichiers


do
echo "Fichier trouvé : $fichier"
done
Une boucle for avec indice de boucle

#!/bin/bash

for (i=1;i<10;i++)
do
m=`expr $1 + $i`
echo "$1 + $i = $m"
done

Vous aimerez peut-être aussi