Considerando:
#!/bin/sh
while getopts ":h" o; do
case "$o" in
h )
"Usage:
sh $(basename "$0") -h Displays help message
sh $(basename "$0") arg Outputs ...
where:
-h help option
arg argument."
exit 0
;;
\? )
echo "Invalid option -$OPTARG" 1>&2
exit 1
;;
: )
echo "Invalid option -$OPTARG requires argument" 1>&2
exit 1
;;
esac
done
Esta invocação retorna not found
por quê?
$ sh getopts.sh -h
getopts.sh: 12: getopts.sh: Usage:
sh getopts.sh -h Displays help message
sh getopts.sh arg Outputs ...
where:
-h help option
arg argument.: not found
Isso está bem:
$ sh getopts.sh arg
Para este eu estava esperando 'Opção inválida':
$ sh getopts.sh
Isso está bem:
$ sh getopts.sh -s x
Invalid option -s
Você parecia ter perdido a impressão da mensagem, mas sim passar a string inteira como um comando a ser executado. Adicione um
echo
antes da stringMas geralmente preferem um estilo de adicionar um heredoc a imprimir a string de várias linhas como
e use a função
show_help
para o-h
sinalizador.Também para sinalizadores de argumento vazios, a primeira chamada para
getopts()
sai do loop, então você não pode ter um handle dentro do loop. Faça uma verificação genérica para argumentos vazios antes de invocargetopts()
Com sua definição anterior de argumento flag
:h
, sugere que-h
não aceita nenhum argumento. A cláusula:)
só se aplica quando você define-h
para receber um argumento, ou seja, quando definido como:h:
. Só então você o executa sem passar os argumentos sob os quais o código:)
é executado. Montando todo o roteiroe rodando agora