Existem algumas ferramentas internas que reconhecerão -x
e --xxxx
como opções, e não argumentos, ou você precisará passar por todas as variáveis de entrada, testar traços e analisar os argumentos a seguir?
shell
shell-script
options
getopts
user394
fonte
fonte
getopt
sempre deve ser verificado como GNU getopt antes de você usá-lo, mas você não deve usá-lo de qualquer maneira, poisgetopts
é mais portátil (e geralmente melhor) de qualquer maneira. Se você fazer necessidade de chamá-lo por algum motivo, chamá-lo de uma forma específica de GNU, e garantir queGETOPT_COMPATIBLE
não está no ambiente.while getopts "ab:" opt
faz?:
letra de opção após indica que requer um argumento. A:
como o primeiro caractere significa suprimir as mensagens de erro.Presumo que você esteja usando o bash ou similar. Um exemplo:
fonte
+=
com uma matriz. Não sabia que você poderia fazer isso. Agradável!Você precisa escrever um ciclo para analisar os parâmetros. Na verdade, você pode usar o
getopts
comando para fazê-lo facilmente.Este é um exemplo simples da
getopts
página de manual:fonte
Escrevi recentemente um script para um trabalho versátil e que permitia vários tipos de comutadores em qualquer ordem. Não posso divulgar o script completo por razões legais óbvias (sem mencionar que não o tenho comigo no momento), mas aqui está o ponto principal. Você pode colocá-lo em uma sub-rotina e chamá-lo no final do seu script:
Eu recomendo limitar seu script bash a menos de 400 linhas / 15k caracteres; meu roteiro mencionado cresceu além desse tamanho e ficou muito difícil de trabalhar. Comecei a reescrevê-lo no Perl, que é muito mais adequado para a tarefa. Tenha isso em mente ao trabalhar em seus scripts no bash. O Bash é ótimo para pequenos scripts e oneliners, mas qualquer coisa mais complexa e é melhor escrevê-lo em Perl.
Observe que eu não testei o exposto acima, então provavelmente não funciona, mas você obtém a idéia geral.
fonte
options
no final não está correto, ele retornará-bash: syntax error near unexpected token $@
. Chame comooptions "$@"
.while
condição não deveria ser em(($#))
vez disso?$#
? Edit: você está certo. Corrigidowhile (( "$#" ))