A passagem de variáveis como essa funciona, mas exige que o usuário entenda os aspectos internos do seu script. Ele também pode causar um comportamento estranho e aparentemente inexplicável se as variáveis forem definidas no ambiente por algum outro motivo totalmente não relacionado ao seu script (e o usuário esquecer de configurá-las na linha de comando ao executar seu script).
A melhor maneira de fazer isso é usar a análise de opção interna do shell, getopts
. Por exemplo:
usage() {
# print some help text here, e.g.
echo Usage:
echo " $0 [-f filename] [-d domainname]"
}
# -f and -d are the only valid options and they both
# take strings as arguments.
while getopts f:d: opt; do
case "$opt" in
f) file="$OPTARG" ;;
d) domain="$OPTARG" ;;
*) usage ; exit 1 ;;
esac
done
shift $(expr $OPTIND - 1)
# print help message and exit if either file or domain are
# empty.
[ -z "$file" ] && usage && exit 1
[ -z "$domain" ] && usage && exit 1
Veja a página do manual do seu shell (por exemplo, man bash
ou man dash
) para obter mais detalhes. O comando help
de bash também fornece informações úteis sobre getopts
- por exemplo, help getopts
Se você quiser usar as opções longas do estilo GNU (por exemplo, --file
, --domain
), bem como as curtas -f
e -d
, você pode usar o programa getopt
do util-linux
package. Observe que isso é getopt
sem um "s", enquanto o interno é getopts
com um "s".
Eu costumo usar o util-linux getopt
porque eu gosto de poder ter --longas opções ... mas getopts
é padrão e não requer nada extra para ser instalado porque ele é construído para cada shell compatível com posix, e funcionará com bash, dash, ksh etc.