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.