Quero que meu script possa receber uma entrada opcional,
por exemplo, atualmente meu script é
#!/bin/bash
somecommand foo
mas gostaria de dizer:
#!/bin/bash
somecommand [ if $1 exists, $1, else, foo ]
Quero que meu script possa receber uma entrada opcional,
por exemplo, atualmente meu script é
#!/bin/bash
somecommand foo
mas gostaria de dizer:
#!/bin/bash
somecommand [ if $1 exists, $1, else, foo ]
Respostas:
Você pode usar a sintaxe do valor padrão:
O descrito acima, conforme descrito no Manual de Referência do Bash - 3.5.3 Expansão dos parâmetros do shell [ênfase minha]:
Se você deseja substituir apenas um valor padrão se o parâmetro não estiver definido (mas não se for nulo, por exemplo, se for uma sequência vazia), use esta sintaxe:
Novamente do Manual de Referência do Bash - 3.5.3 Expansão dos parâmetros do shell :
fonte
foo
se$1
não estiver definido ou uma string vazia " e${1-foo}
"retornarfoo
se$1
não estiver definido".Você pode definir um valor padrão para uma variável assim:
somecommand.sh
Aqui estão alguns exemplos de como isso funciona:
fonte
-
mim confuso (é negado?).fonte
-n
é o mesmo que! -z
.-n
e,! -z
portanto, diria que não é o caso aqui.[ -n $1 ]
sempre será verdade . Se você usa o bash,[[ -n $1 ]]
irá se comportar conforme o esperado, caso contrário, você deve citar[ -n "$1" ]
Você pode verificar o número de argumentos com
$#
fonte
por favor não esqueça, se sua variável $ 1 .. $ n você precisa escrever em uma variável regular para usar a substituição
fonte
DAY=${1:-$(date +%F -d "yesterday")}
Para vários argumentos opcionais , por analogia com o
ls
comando que pode levar um ou mais arquivos ou, por padrão, lista tudo no diretório atual:Infelizmente, não funciona corretamente para arquivos com espaços no caminho. Ainda não descobri como fazer isso funcionar.
fonte
Isso permite o valor padrão para o 1º arg opcional e preserva vários args.
fonte
É possível usar a substituição de variável para substituir um valor fixo ou um comando (como
date
) por um argumento. As respostas até agora se concentraram em valores fixos, mas é isso que eu costumava fazer da data um argumento opcional:fonte