Le shell Bash est un interpréteur de commandes, mais aussi un langage de programmation. Les commandes placées les unes à la suite des autres dans un fichier exécutable forment ce que l'on nomme un script.
Il faut déclarer, en en-tête du script, le nom et l'emplacement de l'interpréteur de commandes :
#!/bin/bash
Exemple de script :
#!/bin/bash echo "Entrez votre nom" read nom echo "Bonjour" echo $nom
Le fichier est sauvegardé sous le nom NomDuScript (par exemple). Attention à l'encodage des caractères (utf8). Bien que ce ne soit pas une obligation, le nom du script est souvent suivi de l'extension .sh.
Le script est rendu exécutable par l'utilisateur avec la commande :
chmod u+x NomDuScript
Plus simplement, il est rendu exécutable pour tout le monde avec la commande :
chmod +x NomDuScript
Pour exécuter le script, il faut se placer dans le dossier où se trouve le script et préfixer la commande par les caractères "./" :
./NomDuScript
La variable d'environnement $PATH définit la liste des dossiers contenant les fichiers exécutables depuis la ligne de commande. Pour transformer un script en une commande, une solution consiste à le placer dans un de ces dossiers. Ils peuvent être affichés avec la commande ci-dessous.
echo $PATH
On peut aussi modifier la variable d'environnement $PATH. Pour la session en cours :
export PATH=$PATH:/home/utilisateur/mes_prog
Pour une modification persistante au niveau session utilisateur, on peut ajouter la commande ci-dessus à la fin du fichier .bashrc, situé dans le dossier personnel.
Pour une modification persistante au niveau système, il faut modifier le fichier "/etc/environment".
Le caractère $ est suivi de la variable entre accolades. Souvent, la variable est suivie du caractère espace. Les accolades sont alors superflues.
#!/bin/bash debut=éco echo "L'$debut est un préfixe." echo "L'${debut}logie est un mot utilisant le préfixe."
Une variable non définie n'engendre pas d'erreur. Elle contient une chaîne vide sauf si une valeur par défaut est définie.
#!/bin/bash i="Variable connue" echo Variable connue : ${i} echo Variable non définie : ${j} echo Valeur de variable par défaut : ${k:-"Valeur par défaut"}
Le caractère $ est suivi de la commande entre parenthèses.
#!/bin/bash echo $(pwd)
Le caractère $ est suivi du calcul entre double parenthèses.
#!/bin/bash a=5 echo $((2*a-3))
La commande echo permet d'afficher une chaîne de caractères. Les deux commandes suivantes donnent le même résultat. Dans le premier cas, la commande echo prend deux paramètres. Dans le deuxième cas, elle n'en prend qu'un seul.
#!/bin/bash echo Bonjour Jean echo "Bonjour Jean"
Une chaîne de caractères comportant un caractère espace se place habituellement entre guillemets.
#!/bin/bash nom1=Marie nom2="Petit Jean" echo Bonjour $nom1 echo Bonjour $nom2
Certains caractères ont une signification pour le shell. Par exemple, > sert à la redirection et $ à la substitution. Pour protéger ces caractères de l'interprétation du shell, trois mécanismes existent.
Exemple :
#!/bin/bash nom1=Marie nom2="Petit Jean" echo Bonjour $nom1 echo Bonjour \$nom1 echo "Bonjour $nom2" echo "Bonjour \$nom2" echo "Bonjour \"Pierre\""
Entre guillemets, tous les caractères de chaîne sauf $ \ `(accent grave) " sont protégés de l'interprétation du shell.
Entre apostrophes, aucun caractère de chaîne, sauf le caractère ', n'est interprété.
La commande test permet de faire un test et de renvoyer 0 si tout s'est bien passé ou 1 en cas d'erreur. La variable $? contient la valeur de retour. On peut raccourcir la commande test par des crochets. Les deux écritures ci-dessous sont donc équivalentes.
test expression [ expression ]
Exemple :
test -f /etc/passwd echo $?
Ecrit d'une autre manière :
[ -f /etc/passwd ] echo $?
if expression then instruction1 instruction2... else instruction3 fi
Exemple :
if [ -f $1 ] then echo "C'est un fichier." else echo "Je ne sais pas ce que c'est." fi
case chaîne in commandes ... ;; esac
Exemple :
echo -n "Entrez un nombre :" read nombre case $nombre in 1) echo "Vous avez tapé 1";; 2) echo "Vous avez tapé 2";; *) echo "Vous n'avez tapé ni 1 ni 2";; esac
Cette commande facilite la création de menus.
select nom [ in liste ; ] do commandes done
Exemple : Ici, le numéro du choix est affecté à $REPLY, le nom du choix à $nom.
select choix in \ "Choix A" \ "Choix B"; do case $REPLY in 1) echo "$choix --> $REPLY";; 2) echo "$choix --> $REPLY";; *) echo "Vous avez tapé n'importe quoi !";; esac done
for x [ in list ] ; do commandes done
Exemple :
for i in 1 2 3 ; do echo $i done
Autre exemple :
for var in * ; do echo "$var" done
* représente la liste des fichiers contenus dans le dossier courant.
until Commande_Test do Commandes Done
while Commande_Test do Commandes Done
On écrit un commentaire dans un fichier script en utilisant le symbole #. Exemple :
#!/bin/bash # Un message d'accueil... echo "Bonjour tout le monde!"
Quand on lance un script :
Exemple :
echo "Nombre de paramètres "$# echo "Les paramètres sont "$* echo "Le second paramètre est "$2
Cette commande permet la lecture d'une valeur au clavier.
echo -n "Entrez votre nom :" read nom echo $nom
Le retour de chariot de fin de chaîne peut être désactivé de plusieurs manières :
echo -n "Un texte" printf "Un texte"
Différentes solutions existent pour effectuer des calculs sur des entiers : La substitution arithmétique, les commandes expr ou let. On utilise la commande bc (calculatrice basique) pour faire des calculs avec des nombres à virgule. Elle fonctionne normalement en mode interactif. Pour le mode commande, on ajoute un tube (ou pipe).
echo "scale=2; 13.7/1.2" | bc