Eu não sei exatamente o que você está perguntando, mas o que o getopts
faz é que ele analisa a linha de comando que já foi dada ao programa e mostra as opções que ele vê. por um, em um formato que é um pouco fácil para o código do programa manipular. Tem a opção de imprimir erros para opções que não conhece, mas é tudo o que faz.
Realmente não "pede" nada de ninguém, já que a linha de comando já está corrigida quando getopts
é chamado. Não há interação, a menos que o restante do programa implemente isso.
Também não, e não pode saber quais opções são necessárias para o programa funcionar (não há sintaxe para isso no "optstring" getopts
como argumento). O caso comum é que as opções no são necessárias (pense em ls
, rm
, vi
...) e, nos casos em que você tenha solicitado opções, você pode verificar manualmente no script.
Considere este exemplo:
#!/bin/bash
opt_a=
opt_b=
while getopts 'a:bc' opt; do
case $opt in
a) opt_a=$OPTARG;;
b) opt_b=1;;
esac
done
if [ -z "$opt_a" ]; then
echo "option a was NOT given, exit."
exit 1;
fi
echo "do something with a='$opt_a' b=$opt_b"
O script verifica explicitamente se a
foi dado. Sem o cheque, o programa ficaria feliz sem ele. getopts
também é avisado para aceitar c
como uma opção e não fornece um erro. O script simplesmente o ignora completamente, pois eu não coloquei um caso c)
ou *)
lá. Não há como getopts
saber que essa opção específica será ignorada.
Observe que o significado habitual de colchetes em uma dica de uso é informar que uma opção é opcional, portanto, se você quiser dizer que todos os -w
, -o
, -c
, -t
devem ser fornecidos para sua script, sugiro soltar os colchetes.