====== 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