3 techniques de script Bash que tout utilisateur Linux devrait connaître
Agence web » Actualités du digital » 3 techniques de script Bash que tout utilisateur Linux devrait connaître

3 techniques de script Bash que tout utilisateur Linux devrait connaître

Avez-vous pensé à mordre la balle et à apprendre les scripts Bash ? Ou peut-être que vous êtes comme moi et que vous cherchez toujours des moyens de vous améliorer. J'ai trois conseils qui amélioreront chaque script Bash que vous écrivez.

Passer des arguments, écrire un menu d'aide et déboguer peut être fastidieux. Cependant, la commande getopts, Heredoc et l'option « set -x » sont des solutions courantes que tout le monde ne connaît pas. Abordons ce problème et apprenons comment ces éléments peuvent améliorer vos scripts Bash.

Lorsque vous exécutez un script des mois après l'avoir écrit, la première chose dont vous aurez besoin est un menu d'aide. Sans cela, vous devez fouiller dans le code source pour vous rafraîchir la mémoire, ce qui est un problème inutile.

Lorsque j'ai commencé à écrire des menus d'aide dans Bash, j'ai utilisé une fonction qui exécutait des dizaines d'instructions d'écho.

_help() {
  echo -e "Usage foo (OPTION)n"
  echo -e "OPTIONS"
  echo -e "  -h     display this help menu"
  echo -e "  -r     do NOT press this buttonn"
  echo -e "  -a     echo somethingn"
}

Même si j'ai aligné les éléments du menu pour les rendre plus lisibles, un Heredoc est de loin supérieur :

_help() {
  cat <

Le code est plus clair, plus lisible, plus facile à écrire et sans caractères spéciaux (par exemple « n ») pour le formater. Pour vous faciliter la vie, vous devriez préférer un Heredoc aux instructions d'écho séparées.

Notez également l'utilisation de « $(basename $0) », qui extrait le nom de fichier du chemin du script afin que notre menu d'aide affiche le nom du script.

  • « $0 » est le chemin du script.

  • « basename » extrait le nom de fichier d'un chemin.

Analyser les arguments de ligne de commande comme un pro

Maintenant que nous avons un menu, nous devons traiter les arguments. Le moyen le plus courant et le plus simple consiste à accéder aux paramètres de position fournis par Bash.

#!/usr/bin/env bash
echo "The first parameter: $1"
echo "The second parameter: $2"

Cependant, cette approche devient complexe lors de la gestion des options (c'est-à-dire des indicateurs) et des valeurs. La commande getopts est la solution incontournable et elle est intégrée à Bash. Ci-dessous, j'ai développé l'exemple de menu d'aide précédent pour nous permettre de traiter les options :

#!/usr/bin/env bash
_help() {
  cat <

Accepter les options de base

La forme de base de la commande getopts est :

getopts OPTSTRING OPTVAR

La chaîne d'options (« optstring ») est la façon dont nous spécifions les options disponibles. Si nous voulons accepter les options -a, -b et -c, alors nous spécifions la chaîne d'option comme suit :

getopts "abc" OPTVAR

Il y a trois faits que nous pouvons utiliser à notre avantage :

  1. La variable d'option (« optvar ») stocke le nom de l'option en cours de traitement (par exemple, a, b ou c).

  2. Une fois terminé, getopts renvoie un nombre supérieur à zéro.

  3. Une boucle while continuera jusqu'à ce qu'elle reçoive une valeur fausse, comme un code de sortie de 1.

En termes simples, le code suivant traitera chaque option :

# This code is incomplete and does not work.
while getopts "abc" opt; do
   ...
done

Étant donné que la variable « opt » stocke le nom de l'option (par exemple, a, b, c), nous pouvons utiliser une instruction case pour nous aider à les traiter :

# This code is incomplete and does not work.
while getopts "abc" opt; do
  case "$opt" in
  a) ... ;;
  b) ... ;;
  c) ... ;;
  esac
done

L'instruction « case $opt in » utilise la variable « opt » et la compare ensuite à « a) », « b) » ou « c) » : la première correspondance gagne. Les instructions Case utilisent la correspondance de modèles, et nous pourrions faire beaucoup plus avec elles si nous le voulions.

Accepter des options avec des valeurs

Obtenir une option valeur est la dernière chose à apprendre, par exemple : « -a foo ». Tout d'abord, nous devons dire à getopts qu'une option accepte une valeur : ajoutez deux points après celle-ci dans la chaîne d'option. Par exemple, « a: » indique à getopts que « -a » accepte une valeur. Il devient alors accessible via la variable « $OPTARG ».

# This code is incomplete and does not work.
while getopts "a:b" opt; do
  case "$opt" in
  a) echo "$OPTARG" ;;
  b) ... ;;
  esac
done

Définir un indicateur pour le débogage facultatif

Les bugs sont inévitables. Heureusement, Bash dispose d'un moyen simple de déboguer votre script en imprimant toutes les instructions lors de leur exécution. Nous pouvons également l'activer en option. Modifions notre script pour que cela se produise, en utilisant une instruction « set -x ».

#!/usr/bin/env bash
set -x  # <-- ENABLE DEBUG STATEMENTS.

_help() {
  cat <

Exécutons maintenant le script :

./script.sh -a foo

Vous pouvez voir sur l'image que Bash imprime chaque commande qu'il exécute et la plupart des variables qu'il évalue.

Vous pouvez éventuellement l'activer via un indicateur :

# This code is incomplete and does not work.
while getopts "ra:hd" opt; do
  case $opt in
  d)
    set -x  # <-- ENABLE DEBUG STATEMENTS.
    ;;
  # ...
  esac
done

Ou vous pouvez l'activer via une variable d'environnement en haut du script :

#!/usr/bin/env bash
(( -n "$DEBUG" )) && set -x  # <-- ENABLE DEBUG STATEMENTS.

Activez ensuite le mode débogage comme ceci :

DEBUG=true ./script.sh -a foo

En procédant ainsi, cela signifie qu'il imprimera également le code de traitement des options.


Voilà donc tout : un menu d'aide judicieux, une analyse des arguments CLI et un débogage. Chacun de ces éléments s’appliquera à presque tous les scripts que vous écrivez. En fait, ils sont si courants que vous pourriez écrire un script pour créer d'autres scripts, en les remplissant avec les concepts que vous avez appris aujourd'hui. En programmation, nous les appelons des extraits. J'ai un script Bash « créer » et « modifier » qui fait exactement cela.

Bash est un sujet beaucoup plus vaste, mais ces trois conseils simples devraient vous constituer une base solide.

★★★★★