Table des matières

Scripts Bash

Exemple simple d'un script shell

Créer un fichier “.sh” avec votre éditeur préféré :

$ vim exemple.sh

On peut utiliser cat pour l'afficher :

$ cat exemple.sh 
echo Exemple de script shell
 
exit 0

Pour l'exécuter :

$ bash exemple.sh
Exemple de script shell

On peut également rendre le script exécutable et le lancer en mettant “./” devant :

$ chmod +x exemple.sh
$./exemple.sh
Exemple de script shell

Ça fonctionne mais l'interpréteur qui est appelé est l'interpréteur par défaut ( sh ). Or, bash est plus évolué et est donc préférable. On modifie donc le script pour ajouter cette première ligne :

#!/bin/bash
# ceci est un commentaire
echo Exemple de script shell
 
exit 0

Déclaration et affichage d'un tableau

Bases

On peut déclarer un tableau

#!/bin/bash
 
# Déclaration de deux tableaux 
tab=("cat" "cd")
 
tableau[0]=hello
tableau[1]=bonjour
 
# Affichage les deux éléments de "tab"
echo ${tab[0]}
echo ${tab[1]}
 
# Afficher tous les éléments de "tableau"
echo ${tableau[@]}
 
# Une autre méthode d'affichage des éléments de "tableau"
for i in ${!tableau[@]}; do echo ${tableau[i]}; done
 
exit 0

Quand on lance le script :

$ ./liste_man.sh 
cat
cd
hello bonjour
hello
bonjour

Tableau de tableau

J'ai essayé de faire du “tableaux dans un tableau” en bash… C'était pas une bonne idée mais je note quand même :

$ declare -A TAB_PROD=( ['ip']="192.168.1.1" ['port']="22"
 
$ declare -A TAB_INT=( ['ip']="192.168.160.1" ['port']="25" )
 
$ declare -A TABLEAU=( ['prod']=${TAB_PROD[@]} ['int']=${TAB_INT[@]} )
 
$ echo ${TABLEAU[@]}
192.168.1.1 22 192.168.160.1 25

Je peux accéder aux valeurs via le tableau de départ ou via le tableau de tableau :

$ echo ${TABLEAU[prod]}
192.168.1.1 22
 
$ echo ${TAB_PROD[@]}
192.168.1.1 22

Ou

$ echo ${TABLEAU[int]}
192.168.160.1 25
 
$ echo ${TAB_INT[@]}
192.168.160.1 25

Je n'ai pas réussi à isoler l'ip ou le port (sans un sed, un cut ou un awk…).

Conditions

if avec une regex :

$ echo $salut
matrix-postgres
 
$ if [[ $salut =~ "matrix" ]]; then echo "tut"; fi
tut

Scripts utiles

Pour générer toutes les pages de man des commandes, j'ai écrit le script liste_man.sh.

Sources

Script shell sur ubuntu-fr.org

Guide avancé d'écriture des scripts Bash sur traduc.org