Table des matières
Bash
Chaque fichier commence par le shebang
#!/bin/bash
Faire le plus possible que le code soit Posix compliant bashism : utiliser de la syntaxe bash qui n'est pas posix compliant
Tester son script avec
shellcheck NOM_SCRIPT
Redirections
- Rediriger la sortie d’erreur (STDERR) vers la sortie standard (STDOUT) dans /dev/null :
COMMANDE > /dev/null 2>&1
- Rediriger la sortie d’erreur (STDERR) et le sortie standard (STDOUT) dans un fichier de log :
COMMANDE > /var/log/mon.log 2>&1
Variables
- Exécuter une commande dans un script : $(COMMANDE_A_METTRE) ⇒ équivalent des back quotes `` (à éviter car pas posix compliant)
- Voir types de variables ⇒ https://doc.ubuntu-fr.org/tutoriel/script_shell
Tests
Tests sur les objets du système de fichiers
Les opérateurs de tests disponibles sont, pour les objets du système de fichiers :
- vrai si l'objet désigné par $FILE existe dans le répertoire courant
[ -e $FILE ]
- vrai si l'objet désigné par $FILE existe dans le répertoire courant et si sa taille est supérieure à zéro
[ -s $FILE ]
- vrai si l'objet désigné par $FILE est un fichier dans le répertoire courant,
[ -f $FILE ]
- vrai si l'objet désigné par $FILE est un fichier lisible dans le répertoire courant,
[ -r $FILE ]
- vrai si l'objet désigné par $FILE est un fichier inscriptible dans le répertoire courant,
[ -w $FILE ]
- vrai si l'objet désigné par $FILE est un fichier exécutable dans le répertoire courant,
[ -x $FILE ]
- vrai si l'objet désigné par $FILE est un répertoire dans le répertoire courant,
[ -d $FILE ]
- vrai si l'objet désigné par $FILE à été modifié depuis la dernière lecture.
[ -N $FILE ]
Tests sur les chaînes de caractères
Les opérateurs de tests disponibles sont, pour les chaînes :
- vrai si c1 et c2 sont égaux,
[ c1 = c2 ]
- vrai si c1 et c2 sont différents,
[ c1 != c2 ]
- vrai si c est une chaîne vide (
Zero
),[ -z c ]
- vrai si c n'est pas une chaîne vide (
Non zero
).[ -n c ]
Table de vérité de « -a »
Comparaison | Résultat | Calcul |
---|---|---|
0 et 0 | 0 | 0 × 0 = 0 |
0 et 1 | 0 | 0 × 1 = 0 |
1 et 0 | 0 | 1 × 0 = 0 |
1 et 1 | 1 | 1 × 1 = 1 |
Les deux assertions doivent être vérifiées pour que la condition le soit aussi.
Table de vérité de « -o »
Comparaison | Résultat | Calcul |
---|---|---|
0 ou 0 | 0 | 0 + 0 = 0 |
0 ou 1 | 1 | 0 + 1 = 1 |
1 ou 0 | 1 | 1 + 0 = 1 |
1 ou 1 | 1 | 1 + 1 = 1 |
Dès que l'une des deux assertions est vérifiée, la condition globale l'est aussi.
Astuces diverses
Logging
- Afficher la date au format YYY:MM:DD HH:MM:SS :
echo "$(date '+%F %T') test"
Getopts
cat « EOF permet d'afficher du texte avec le même formatage jusqu'au caractère EOF.
cat << EOF Tool for Security Patch Management. Usage: $0 [options] OPTIONS: -h Display help -v Be verbose -u Update & Download only Security updates -f Force Security Upgrade -s Safe Security Upgrade (ask host server before, need to define --host and --port) -i Ignore package during upgrade whose name contains one of this param, separated with ',' or '|' or ' '. Example : "mysql,apache" -l Log file (Default : /var/log/securityUpgrades.log) -r Host asked for safe upgrade -p Remote host's port EOF
Analyse de paramètres et message d'erreurs avec Getops : http://www.quennec.fr/book/export/html/341
Lire et traiter les lignes d'un fichier
#!/bin/bash while read ligne; do echo $ligne done < fichier.txt
Divers
Raccourcis Atom
Commenter blocs de texte ⇒ ctrl+maj+/
Sources
https://fr.wikibooks.org/wiki/Programmation_Bash/Tests - Contenus sous licence CC BY-SA