Quelques notes pour bien commencer un script bash
.
Aide
Il faut toujours commencer par la fonction d’aide. Ça sert aussi de documentation pour celui qui veut lire le script.
help() {
cat <<-DOC
Un peu de doc pour expliquer ce que fait le script,
comment on l'utilise, présenter les options, etc.
DOC
}
Ci-dessus, on utilise -
devant DOC
pour pourvoir indenter le texte
(par des <TAB>
uniquement); ceux-ci seront ignoré à l’affichage.
Gérer les arguments
Normaliser les options avec getopt
L’utilisation de getopt
permet de normaliser les options
pour un traitement plus simple par la suite.
Un message d’erreur est émit si on utilise des options non déclarée,
sauf si la liste des options courte commence par :
.
Le :
après une option (courte ou longue) signale qu’elle attend un argument
(comme pour les options -m
et --mode
ci-dessous).
On peut utiliser ::
si l’argument est optionnel
(comme pour les options -v
et --verbose
ci-dessous).
options=$(getopt -o hv:ⓜ --long help,verbose::,mode: -- "$@")
if [ $? != 0 ] ; then exit 1 ; fi
eval set -- "$options"
La dernière ligne remplace les arguments initiaux par la version pré-traitée
par getopt
. Outre la vérification, il s’est occupé de mettre toutes les
options en premier, suivi par --
, puis les autres arguments.
Il a aussi géré les arguments optionnels des options.
Les options suivantes sont valides :
--mode=2
--mode 2
-m 2
-m2
--verbose=2
-v2
Par contre, celle-ci ne le sont pas pour une option avec un argument optionnel :
--verbose 2
-v 2
Traiter les options
Que l’on ait ou non utilisé getopt
pour pré-traiter les arguments,
il faut utiliser une boucle pour traiter les options.
Ci-dessous, on suppose que getopt
s’est occupé de la gestion d’erreurs.
while true; do
case "$1" in
-h | --help ) help ; exit 0 ;;
-v | --verbose )
case "$2" in
"") verbose=1 ; shift 2 ;;
*) verbose=$2 ; shift 2 ;;
esac ;;
-m | --mode ) mode="$2" ; shift 2 ;;
-- ) shift; break ;;
esac
done
Il faut éventuellement gérer les arguments restants. Par exemple, si on n’attend pas d’autres arguments que les options, on peut vérifier qu’il n’y en a effectivement pas :
if [ $# -ne 0 ] ; then
echo "ERREUR: arguments parasites: $@"
echo "Utiliser l'option --help pour plus d'information."
exit 2
fi
Voir aussi :
- Bash : redirection
- Bash : pid d'un processus en arrière plan
- Bash : sélection de fichiers par extension
- Bash : variables et redirections
- Bash : faire un menu
- Bash : mesurer le temps
- Perl pour faire des scripts efficaces
- Bash sur la ligne de commande
- Bash : pour écrire des scripts
- Les couleurs dans un terminal
- Afficher un pourcentage dans une page HTML
- VNC : Virtual Network Computing
- Git : déménagement d'un dépôt
- Quelques liens au sujet de l'analyse statique
- Ocaml: mon principal langage de développement
- Disque dur externe
- Les profiles dans Firefox
- Cryptographie et mail sous Android
- Quelques liens au sujet du C
- Git rebase : pour diviser un commit