Comment puis-je vérifier si un attribut -h
a été passé dans un script shell ? J'aimerais afficher un message d'aide lorsqu'un utilisateur appelle myscript.sh -h
.
Réponses
Trop de publicités?voici un exemple pour bash :
usage="$(basename "$0") [-h] [-s n] -- program to calculate the answer to life, the universe and everything
where:
-h show this help text
-s set the seed value (default: 42)"
seed=42
while getopts ':hs:' option; do
case "$option" in
h) echo "$usage"
exit
;;
s) seed=$OPTARG
;;
:) printf "missing argument for -%s\n" "$OPTARG" >&2
echo "$usage" >&2
exit 1
;;
\?) printf "illegal option: -%s\n" "$OPTARG" >&2
echo "$usage" >&2
exit 1
;;
esac
done
shift $((OPTIND - 1))
Pour l'utiliser à l'intérieur d'une fonction :
- utiliser
"$FUNCNAME"
au lieu de$(basename "$0")
- ajouter
local OPTIND OPTARG
avant d'appelergetopts
seb
Points
1267
Vincent Stans
Points
484
voici une partie que je l'utilise pour démarrer un serveur VNC
#!/bin/bash
start() {
echo "Starting vnc server with $resolution on Display $display"
#your execute command here mine is below
#vncserver :$display -geometry $resolution
}
stop() {
echo "Killing vncserver on display $display"
#vncserver -kill :$display
}
#########################
# The command line help #
#########################
display_help() {
echo "Usage: $0 [option...] {start|stop|restart}" >&2
echo
echo " -r, --resolution run with the given resolution WxH"
echo " -d, --display Set on which display to host on "
echo
# echo some stuff here for the -a or --add-options
exit 1
}
################################
# Check if parameters options #
# are given on the commandline #
################################
while :
do
case "$1" in
-r | --resolution)
if [ $# -ne 0 ]; then
resolution="$2" # You may want to check validity of $2
fi
shift 2
;;
-h | --help)
display_help # Call your function
exit 0
;;
-d | --display)
display="$2"
shift 2
;;
-a | --add-options)
# do something here call function
# and write it in your help function display_help()
shift 2
;;
--) # End of all options
shift
break
;;
-*)
echo "Error: Unknown option: $1" >&2
## or call function display_help
exit 1
;;
*) # No more options
break
;;
esac
done
######################
# Check if parameter #
# is set too execute #
######################
case "$1" in
start)
start # calling function start()
;;
stop)
stop # calling function stop()
;;
restart)
stop # calling function stop()
start # calling function start()
;;
*)
# echo "Usage: $0 {start|stop|restart}" >&2
display_help
exit 1
;;
esac
C'est un peu bizarre que j'ai placé le redémarrage de l'arrêt de démarrage dans un cas séparé mais cela devrait fonctionner
anubhava
Points
172509
Mieux vaut utiliser getopt facilité de bash. S'il vous plaît regarder ce Q&R pour plus d'aide : Utilisation getopts dans le script shell bash pour obtenir des options de ligne de commande longues et courtes