Bash : Approfondir

Ce tutoriel fait suite à celui-ci, qui avait pour objectif de vous présenter les bases de la programmation Bash. Ici, je vais vous présenter quelques notions plus avancées qui vous permettront d'améliorer vos scripts et d'élargir leur champ d'action.



1. Redirections :

Avant qu'une commande ne soit exécutée, il est possible de rediriger son entrée et sa sortie en utilisant une notation spéciale interprétée par le shell. Les redirections peuvent également servir à ouvrir ou fermer des fichiers dans l'environnement actuel du shell.

Ici, le mieux est de vous montrer quelques exemples. Vous comprendrez tout de suite.

Redirection d'entrée ( < ) : ici la commande "grep" prend en entrée standard le contenu du fichier /etc/passwd et y recherche la ligne contenant le motif "root".

$ grep root < /etc/passwd
root:x:0:0:root:/root:/bin/bash

Redirection de sortie ( > ) : dans le premier exemple, la commande "echo" ajoute à mon_fichier (qui est créé s'il n'éxiste pas) une chaîne de caractère. S'il n'y a qu'un seul symbole '>', le contenu du fichier est ecrasé, et s'il y en a deux ( '>>' ), le flux est ajouté à la fin du fichier. Ainsi, les deux éxécutions du "cat" mettent le contenu de deux fichiers dans un seul.

$ echo "Bonjour" > mon_fichier
$ cat fichier_1 > fichier
$ cat fichier_2 >> fichier

Redirection des erreurs ( 2> ) : on peut aussi rediriger les méssages d'érreurs vers un fichier, ou, dans notre cas, vers la poubelle (/dev/null).

$ mozilla 2> /dev/null


2. Les expréssions arithmétiques :

Bash inclut en natif, un système de calcul arithmétique (donc uniquement des calculs avec des nombres entiers) très simple à utiliser :

$(( nombre_1 opération nombre_2))

La liste des opérations est la suivante :

Exemple :

#!/bin/bash
a=2
b=3
c=$(( a**b +b ))
#retourne "2 puissance 3 plus 3" = "11"
echo $c


Remarque : à l'interieur des doubles parenthèses, les noms des variables n'ont pas besoin d'être prefixés par le carcatère $. Vous pouvez néanmoins le faire quand même, les deux syntaxes seront acceptés.



3. Les expréssions booléennes :

La liste des opérations booléennes accessibles sous Bash :

Exemple :

#!/bin/bash
nombre_1=25
nombre_2=390
if (( nombre_1 >= nombre_2 )); then
    echo "nombre_1 est superieur ou egale a nombre_2"
fi

Plus couramment, il sera intéressant d'utiliser les connecteurs logiques pour lancer des commandes. Ainsi :



Remarque : à l'interieur des doubles parenthèses, les noms des variables n'ont pas besoin d'être prefixés par le carcatère $. Vous pouvez néanmoins le faire quand même, les deux syntaxes seront acceptés.



4. Les expréssions régulières :

Exemple :

# afficher tous les fichiers ayant pour extension .avi ou .AVI ou .aVi ...
$ ls *.[aA][vV][iI]


Pour la substitution ou la selection de motifs dans une chaîne de caractère :

Exemples :

# affiche "Rien" car la variable n'a pas encore été créée
$ echo ${variable:-Rien}

variable="Bonjour tout le monde"

# affiche "tout le monde"
$ echo ${variable:8}
# affiche "Bonjour"
$ echo ${variable:0:7}
# affiche "Bonsoir tout le monde"
$ echo ${variable/Bonjour/Bonsoir}



5. Divers :

Voici une petite liste de commandes , variables ou de syntaxes pouvant être utiles :



Ce tutoriel est loin d'être exhaustif sur le sujet, vous trouverez beaucoup d'autres informations en lisant le manuel utilisateur ("man bash") par exemple. Mais avec toutes ces notions vous pourrez déja construire des scripts intéressants. Le Bash n'est pas un langage bas ou moyen niveau comme l'assembleur ou le C, mais un langage de script, ne vous méprenez donc pas sur son utilisation et sur ses fonctionnalités.

Bon scriptage ...