Você disse a getopts
que a opção -d
deve aceitar um argumento e na linha de comando você usa -d -f myformat
, o que claramente (?) diz " -f
é o argumento que estou dando à -d
option ".
Isso não é um erro no código, mas no uso do script na linha de comando.
Seu código precisa verificar se os argumentos da opção estão corretos e se todas as opções estão definidas de maneira apropriada.
Possivelmente algo como
while getopts "d:f:" opt; do
case $opt in
d) dir=$OPTARG ;;
f) format=$OPTARG ;;
*) echo 'error' >&2
exit 1
esac
done
# If -d is *required*
if [ ! -d "$dir" ]; then
echo 'Option -d missing or designates non-directory' >&2
exit 1
fi
# If -d is *optional*
if [ -n "$dir" ] && [ ! -d "$dir" ]; then
echo 'Option -d designates non-directory' >&2
exit 1
fi
Se a opção -d
for opcional e você quiser usar um valor padrão para a variável dir
no código acima, comece definindo dir
como padrão valor antes do loop while
.
Uma opção de linha de comando não pode aceitar nem aceitar argumentos.