Comment écrire en BASH

17 Nov 2021 - nicolas

Quelques tuyaux pour écrire des scripts bash.

Bourne Again SHell

Ressources externes :

Autocompletion

Dans le fichier .bashrc ou un de ses fichiers source :

nomScript_options=$(nomCommandePourRécupérerLesOptionsPossibles)
complete -W "${nomScript_options}" -o bashdefault -o default 'nomScript'

Utilisation

Exemples présents là : /usr/share/doc/util-linux/examples.

Le ~ :

Ecrire un script bash :

  1. Créer un fichier avec ou sans l’extension .sh.
  2. A la première ligne du fichier, écrire où se trouve l’exécutable du shell dans un commentaire (appelé shebang) : #! /bin/bash.

    Le shebang peut aussi pointer vers d’autres programmes et contenir des paramètres.

    Exemple avec sed :

     #! /usr/bin/sed -f
    
     # Un peu de code sed :
     3,5d
    
  3. Ecrire le reste des commandes désirées.

    Exemple :

     #!/bin/bash
    
     # Ceci est un commentaire.
     echo 'Hello world!' # echo est une commande, tout comme pwd, ls, cat...
    
     # Paramètres du script :
     $@ # Contient tous les paramètres passés au script
     $0 # Contient le nom du fichier du script avec le chemin complet. Utiliser $(basename $0) pour retirer le chemin.
     $1 # Contient le premier paramètre
     $# # Contient le nombre de paramètres passés au script
    
     nomFonction() {
         variableGlobale='valeur'
         local variableLocale='valeur'
     }
    
     greetSomeone() {
         echo "Hello $1" # L'argument "World" est récupéré avec le paramètre $1
     }
    
     greetSomeone "World" # L'argument "World" est passé à la fonction greetSomeone
    

Exécuter un script bash :

Debug d’un script :

Paramètres d’un script ou d’une fonction :

Variables :

Chaînes de caractères (string) :

Tableaux :

Arrêter un script :

exit nombreOptionel

Afficher le contenu d’une variable :

echo $nomVariable1$nomVariable2`

Récupérer une saisie au clavier :

read nomVariable1 nomVariable2

Effectuer des calculs sur des entiers :

let "expression"

Variables d’environnement :

Conditions :

Fonctions :

Boucles

Scope

When you use a command substitution (i.e., the $(…) construct), you are creating a subshell. Subshells inherit variables from their parent shells, but this only works one way: A subshell cannot modify the environment of its parent shell.

StackOverflow