Cédric Temple

Administrateur système en logiciels libres

BASH, scripting avancé

2019-04-23 » notes pour plus tard

Notes sur BASH

Itérateur

# faire un boucle de 1 à 9 :
for i in `seq 0 9`
do
   ...
done

Tests sur les fichiers / dossiers

# vérifier qu'un élément existe
if [ -e ${FILE} ]
# vérifier qu'un élément existe et est un fichier (pas un dossier, ni un lien symbolique, ni ...)
if [ -f ${FILE} ]
# vérifier qu'un élément existe et est un répertoire / directory
if [ -d ${FILE} ]
# vérifier qu'un élément existe et est un lien symbolique
if [ -d ${FILE} ]
# vérifier qu'un élément existe et que sa taille est strictement positive
if [ -s ${FILE} ]
# vérifier qu'un élément existe et que cet élément a le droit de lecture positionné
if [ -r ${FILE} ]
# vérifier qu'un élément existe et que cet élément a le droit en écriture positionné
if [ -w ${FILE} ]
# vérifier qu'un élément existe et que cet élément a le droit d'exécution positionné
if [ -x ${FILE} ]

Faire des calculs / $i++

C’est toujours utile de pouvoir incrémenter une variable à l’aide de quelque chose comme $i++. En bash, ce n’est pas si simple.

let i=0
...
...
let i++

Pour faire un calcul :

let A=10
let B=2
let C=A+B

Debbuger un script

Permet de voir les commandes telles que lancées par le script :

#!/bin/bash -x

let A=10
let B=2
let C=A+B

Exemple de sortie :

+ let A=10
+ let B=2
+ let C=A+B
+ echo 12
12

Si on ne veut pas modifier le script pour ajouter l’option définitivement mais juste le faire de temps en temps :

bash -x monscript.sh

Si on veut debbuger une petite partie du script :

#!/bin/bash
...
...
set -x # le debug commence ici
...
...
set +x # le debug termine ici
...

Sortir dès qu’une commande ne retourne pas un code de retour nul

#!/bin/bash -e
# ou
set -e

Exemple de script shell :

#!/bin/bash -xe

echo "A"
(exit 0)
echo "B"
(exit 1)
echo "C"

Le résultat de ce script montre que lorsque la commande en sous-shell (celle dans des parenthèses) renvoie un code de retour nul, le shell continue alors que si le code de retour est non nul, le shell s’arrête :

+ echo A
A
+ exit 0
+ echo B
B
+ exit 1
© Cédric Temple - - Powered by Jekyll.