Atualizar
Voltei e li toda a sua pergunta e percebi que tinha originalmente respondido a uma pergunta um pouco diferente da que você perguntou, então aqui vai:
-
Sua estrutura está bem. Analise a opção de comando no início do script.
-
Sim, você pode usar uma declaração
case
, verificando com$1
(veja minha resposta original abaixo), embora se você estiver planejando apenas uma única opção, você pode executar um único teste com a mesma facilidade veja minha resposta original abaixo). Para usar uma instruçãocase
com várias opções possíveis, coloque-a em um loopwhile
, no formatowhile "$1" ; do case ... esac; shift; done
. O comandoshift
substituirá$1
pela próxima palavra / opção da sua linha de comando.
Resposta original
Existem várias maneiras de lidar com isso. Se esta é a única opção, ou se houver apenas alguns, você pode considerar analisá-lo manualmente. No shell-speak, todas as palavras após o comando shell são chamadas parâmetros , e cada uma é atribuída a um parâmetro posicional , no formato $n
with n
começando em 1. Assim, você pode realizar um teste para verificar se [[ $1 == "--nomail" ]]
e agir de acordo. Essa é a maneira simples e direta para apenas uma única opção.
Para scripts de shell mais complexos com muitas opções, você pode querer usar algum tipo de comando getopts
para analisar as opções para você. O shell bash
inclui uma versão de getopts
como um arquivo interno, e você pode aprender mais sobre isso digitando man bash
na linha de comando e, em seguida (se o pager padrão estiver definido como less
) /^ *getopt
.