Existe alguma maneira fácil de passar (receber) parâmetros nomeados para um script de shell?
Por exemplo,
my_script -p_out '/some/path' -arg_1 '5'
E por dentro my_script.sh
receba-os como:
# I believe this notation does not work, but is there anything close to it?
p_out=$ARGUMENTS['p_out']
arg1=$ARGUMENTS['arg_1']
printf "The Argument p_out is %s" "$p_out"
printf "The Argument arg_1 is %s" "$arg1"
Isso é possível no Bash ou no Zsh?
bash
shell-script
zsh
arguments
Amelio Vazquez-Reina
fonte
fonte
Respostas:
A sintaxe provavelmente mais próxima disso é:
fonte
-k
opção estiver configurada no shell de chamada , terámy_script p_out='/some/path' arg_1='5'
o mesmo efeito. (Todos os argumentos na forma de uma atribuição são adicionadas ao meio ambiente, não apenas as atribuições que precede o comando.)x=42 echo $x; echo $x
que significa que na próxima execução demy_script
, sep_out
for omitido, permanecerá no valor passado na última vez !! ('/some/path'
)unset
após a primeira execução, redefini-los antes da próxima execução?x=42 echo $x
nem gera nada se$x
não tiver sido definido antes.Se você não se importa em se limitar a nomes de argumentos de uma letra
my_script -p '/some/path' -a5
, ou seja , no bash, você pode usar o built-ingetopts
, por exemploEntão você pode fazer
Há um tutorial útil sobre getopts pequenos ou você pode digitar
help getopts
no prompt do shell.fonte
i
ed
). Quando o executo,my_script -i asd -d asd
recebo uma string vazia para od
argumento. Quando o executo,my_script -d asd -i asd
recebo uma string vazia para ambos os argumentos.Eu roubei isso do drupal.org , mas você poderia fazer algo assim:
A única ressalva é que você precisa usar a sintaxe
my_script --p_out=/some/path --arg_1=5
.fonte
-c|--condition)
Eu uso esse script e funciona como um encanto:
Uso
Resultado do console:
STEPS e REPOSITORY_NAME estão prontos para uso no script.
Não importa em que ordem os argumentos estão.
fonte
Com
zsh
, você usariazparseopts
:Mas você chamaria o script com
myscript --p_out foo
.Note que
zparseopts
não suporta abreviar opções longas ou a--p_out=foo
sintaxe como o GNUgetopt(3)
.fonte
[]
2 traços? Não faz sentido!info zsh zparseopts
para mais detalhesEu só vim com esse script
passe como
my_script --p_out /some/path --arg_1 5
e então no script você pode usar$arg_1
e$p_out
.fonte
v=``echo ${1} | awk '{print substr($1,3)}'`` typeset $v="$2"
(Retirar uma crase cada lado)Se uma função ou aplicativo tiver mais de zero argumentos, ele sempre terá um último argumento.
Se você deseja ler os pares de sinalizador e valor de opção, como em:
$ ./t.sh -o output -i input -l last
E você deseja aceitar um número variável de pares de opção / valor,
E não quero uma árvore enorme "se .. então .. mais .. fi",
Depois de verificar uma contagem de argumentos diferente de zero e par,
Escreva um loop while com essas quatro instruções eval como o corpo, seguido de uma instrução case usando os dois valores determinados em cada passagem pelo loop.
A parte complicada do script é demonstrada aqui:
fonte
você acabou de injetar parâmetros de linha de comando no escopo do script !!
fonte
-a 1 -b mitsos -c karamitsos