BASH - Mémo pour scripter

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 chaines



-z $var : Vrai si la taille de la chaîne est zéro (variable non utilisée ou vide)

Code BASH :
if [ -z $var ]


-n $var : Vrai si la taille de la chaîne est différente de zéro (variable utilisée et non vide)

Code BASH :
if [ -n $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 ]



La négation (inverser le test)



Le symbole de négation est !.

Si on teste de cette façon su un dossier existe :
Code BASH :
if [ -d "$DIR" ]


Et bien tester s'il existe pas se fera ainsi :
Code BASH :
if [ ! -d "$DIR" ]



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
Cette page a été vue 89551 fois