BASH - Mémo pour scripter
Table des matières
Je script, je script, mais parfois, j'ai un sacré trou de mémoire ... et je galère à trouver ce que je cherche sur Internet.
Comment on incrémente une variable ? Comment on fait un SI, un POUR ?
Et bien la réponse se trouve ci-dessous !
Pour mettre dans la variable a la valeur chaîne toto :
De la même façon, on peut mettre dans des variables des nombres :
Pour utiliser ces variables, ajouter un $ devant :
On peut mettre dans une variable le résultat d'une commande shell en encadrant la commande dans $() :
Grosso-modo, pour faire des calculs simples, on utilise la syntaxe suivante :
On peut affecter ce calcul à une variable :
Ou bien l'afficher :
Si on veut faire une addition :
Si on veut faire une soustraction :
Si on veut faire une multiplication :
Si on veut faire une division :
On peut évidemment utiliser des variables dans le calcul :
Pour incrémenter ou décrémenter, on peut utiliser la fonction let :
Le test "Si'" est généralement fait ainsi :
Pour les exemples, nous avons besoin d'opérateurs de comparaison, voir ci-dessous.
-eq : est égal à
-ne : n'est pas égal à
-gt : est plus grand que
-ge : est plus grand ou égal à
-lt : est plus petit que
-le : est plus petit ou égal à
== : est égal à
!= : n'est pas égal à
-z string : Vrai si la longueur de la chaîne est égale à 0 (variable non initialisée)
-e file : Vrai si le fichier existe
-d file : Vrai si le fichier existe et que c'est un répertoire
-f file : Vrai si le fichier existe et que c'est un fichier ordinaire
-h file : Vrai si le fichier existe et que c'est un lien symbolique
-r file : Vrai si le fichier possède les droits de lecture
-s file : Vrai si le fichier a une taille non nulle
-w file : Vrai si le fichier possède les droits d'écriture
-x file : Vrai si le fichier possède les droits d'exécution
-O file : Vrai si le possesseur est identique à celui qui exécute le test
-G file : Vrai si le possesseur qui exécute le test fait partie du groupe du fichier
-N file : Vrai si le fichier existe et qu'il a été modifié depuis sa dernière lecture
file1 -nt file2 : Vrai si le file1 est plus récent que file2 (date de modification) ou si file1 existe et pas file2
file1 -ot file2 : Vrai si file1 est plus ancien que file2 ou que file2 existe et pas file1
Pour le for ce n'est pas très compliqué :
On peut traiter avec une commande aussi, par exemple la boucle ci-dessus peut être écrite en utilisant la commande seq :
Et on peut aussi utiliser des chaines de caractère :
Pour la boucle infinie, utiliser ceci (fin de la boucle avec break) ou CTRL+C :
De manière générale, la syntaxe est la suivante :
Voici un exemple :
La boucle infinie se traduit ainsi :
La boucle infinie peut s’interrompre avec break :
Introduction
Je script, je script, mais parfois, j'ai un sacré trou de mémoire ... et je galère à trouver ce que je cherche sur Internet.
Comment on incrémente une variable ? Comment on fait un SI, un POUR ?
Et bien la réponse se trouve ci-dessous !
Les variables
Affectation de variable
Pour mettre dans la variable a la valeur chaîne toto :
Code BASH :
a="toto"
De la même façon, on peut mettre dans des variables des nombres :
Code BASH :
b=2
Pour utiliser ces variables, ajouter un $ devant :
Code BASH :
echo $a toto
On peut mettre dans une variable le résultat d'une commande shell en encadrant la commande dans $() :
Code BASH :
$ ls -l /etc | wc -l 342 nb=$(ls -l /etc | wc -l) echo $nb 342
Calculs
Calculs simples
Grosso-modo, pour faire des calculs simples, on utilise la syntaxe suivante :
Code BASH :
$((calcul))
On peut affecter ce calcul à une variable :
Code BASH :
a=$((calcul))
Ou bien l'afficher :
Code BASH :
echo $((calcul))
Si on veut faire une addition :
Code BASH :
echo $((21+21)) 42
Si on veut faire une soustraction :
Code BASH :
echo $((63-21)) 42
Si on veut faire une multiplication :
Code BASH :
echo $((2*21)) 42
Si on veut faire une division :
Code BASH :
echo $((84/2)) 42
On peut évidemment utiliser des variables dans le calcul :
Code BASH :
i=42 echo $(($i*2)) 84
Incrémenter et décrémenter
Pour incrémenter ou décrémenter, on peut utiliser la fonction let :
Code BASH :
i=42 let i-- echo $i 41
Code BASH :
let i++ echo $i 42
Les structures conditionnelles : If
Le test "Si'" est généralement fait ainsi :
Code BASH :
if condition; then commande 1 commande2 fi
Pour les exemples, nous avons besoin d'opérateurs de comparaison, voir ci-dessous.
Les opérateurs de comparaison
Comparaison d'entiers
-eq : est égal à
Code BASH :
if [ "$a" -eq "$b" ]
-ne : n'est pas égal à
Code BASH :
if [ "$a" -ne "$b" ]
-gt : est plus grand que
Code BASH :
if ["$a" -gt "$b" ]
-ge : est plus grand ou égal à
Code BASH :
if [ "$a" -ge "$b" ]
-lt : est plus petit que
Code BASH :
if [ "$a" -lt "$b" ]
-le : est plus petit ou égal à
Code BASH :
if [ "$a" -le "$b" ]
Comparaison de chaînes
== : est égal à
Code BASH :
if [ "$a" == "$b" ]
!= : n'est pas égal à
Code BASH :
if [ "$a" != "$b" ]
-z string : Vrai si la longueur de la chaîne est égale à 0 (variable non initialisée)
Code BASH :
if [ -z "$var" ]
Les tests sur les fichiers
-e file : Vrai si le fichier existe
Code BASH :
if [ -e /tmp/fichier ]
-d file : Vrai si le fichier existe et que c'est un répertoire
Code BASH :
if [ -d /tmp/dossier ]
-f file : Vrai si le fichier existe et que c'est un fichier ordinaire
Code BASH :
if [ -f /tmp/fichier ]
-h file : Vrai si le fichier existe et que c'est un lien symbolique
Code BASH :
if [ -h /tmp/lien ]
-r file : Vrai si le fichier possède les droits de lecture
Code BASH :
if [ -r /tmp/fichier ]
-s file : Vrai si le fichier a une taille non nulle
Code BASH :
if [ -s /tmp/fichier ]
-w file : Vrai si le fichier possède les droits d'écriture
Code BASH :
if [ -w /tmp/fichier ]
-x file : Vrai si le fichier possède les droits d'exécution
Code BASH :
if [ -x /tmp/fichier ]
-O file : Vrai si le possesseur est identique à celui qui exécute le test
Code BASH :
if [ -O /tmp/fichier ]
-G file : Vrai si le possesseur qui exécute le test fait partie du groupe du fichier
Code BASH :
if [ -G /tmp/fichier ]
-N file : Vrai si le fichier existe et qu'il a été modifié depuis sa dernière lecture
Code BASH :
if [ -N /tmp/fichier ]
Comparaison de fichiers
file1 -nt file2 : Vrai si le file1 est plus récent que file2 (date de modification) ou si file1 existe et pas file2
Code BASH :
if [ file1 -nt file2 ]
file1 -ot file2 : Vrai si file1 est plus ancien que file2 ou que file2 existe et pas file1
Code BASH :
if [ file1 -ot file2 ]
Les structures conditionnelles Partie 2
For
Pour le for ce n'est pas très compliqué :
Code BASH :
for i in 1 2 3 4 5 do echo $i commande1 commande2 commandeN done
On peut traiter avec une commande aussi, par exemple la boucle ci-dessus peut être écrite en utilisant la commande seq :
Code BASH :
for i in $(seq 1 5) do echo $i commande1 commande2 commandeN done
Et on peut aussi utiliser des chaines de caractère :
Code BASH :
for f in fic1 fic2 fic3 do echo "On affiche le fichier $f" cat $f done
Pour la boucle infinie, utiliser ceci (fin de la boucle avec break) ou CTRL+C :
Code BASH :
for (( ; ; )) do echo "boucle infinie" done
While
De manière générale, la syntaxe est la suivante :
Code BASH :
while [ condition ] do commande1 commande2 commande3 done
Voici un exemple :
Code BASH :
x=1 while [ $x -le 5 ] do echo "Passage numéro $i" x=$(($x+1)) done
La boucle infinie se traduit ainsi :
Code BASH :
while : do echo "boucle infinie" done
La boucle infinie peut s’interrompre avec break :
Code BASH :
while : do read -p "Entrer un chiffre ( -1 pour quitter ) : " a if [ $a -eq -1 ] then break fi echo "Vous avez saisi $a" done