Se você estiver satisfeito com -h
em vez de --help
, também poderá usar getopts
, o que é muito conveniente. O código que você precisaria então (modificado da resposta de Eric Carvalho):
#!/bin/bash
function show_help() {
cat << ENDHELP
-a you can do stuff like that.
-b you can do stuff like this.
-c this is extremely fancy stuff.
ENDHELP
}
#checks if there are any arguments by (ab)using the short-circuited OR
(( $# )) || echo "No arguments. Run $0 --help"
while getopts 'habc' opt; do
case "$opt" in
h)
show_help
;;
a)
echo "sudo /path/to/other/script"
;;
b)
echo "do_some_stuff"
echo "do_another_stuff"
;;
c)
echo "do_extremely_fancy_stuff"
echo "do_another_extremely_fancy_stuff"
echo "run_as_many_commands_as_you_want"
;;
*)
echo "Run $0 --help"
;;
esac
done
Agora você pode passar várias opções para o seu shellscript, então se você quiser executar a, bec você pode fazer
./script.bash -a -b -c
ou até mesmo
./script.bash -abc
A string 'habc'
da opção informa quais opções são permitidas, getopts
informará automaticamente sobre as opções não suportadas. Você também pode adicionar argumentos às opções (como o nome dos outros scripts que deseja executar), então você precisa adicionar dois pontos ( :
) atrás de sua opção, o argumento é então armazenado em $OPTARG
. Veja esta (incompleta) página wiki sobre como fazer isso.
PS Você também pode usar (o mais antigo) getopt
(sem s ), getopt
é um pouco mais difícil, mas permite usar --help
.