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