Estou aprendendo bash.
Gostaria de fazer um script simples que, quando não são fornecidos argumentos, mostra alguma mensagem. E quando dou números como argumento, dependendo do valor, ele faz uma coisa ou outra.
Também gostaria de saber sugestões para os melhores manuais online para iniciantes em bash
obrigado
> /dev/null
e / ou2> /dev/null
depois enviar sua saída padrão e / ou fluxos de erro padrão no esquecimento.exit 1
). Existem outras convenções sobre códigos de retorno / saída, que você pode encontrar online rapidamente, mas o ponto importante é que não deve ser 0, o que indica sucesso.Se estiver interessado apenas em resgatar se um argumento específico estiver faltando, a Substituição de Parâmetro é ótima:
fonte
Exemplo
Resultado
Detalhes
-z é o operador unário para o comprimento da string é zero.
$*
são todos argumentos. As aspas são para segurança e encapsulam vários argumentos, se houver.Use
man bash
e pesquise ( tecla / ) por "unário" para mais operadores como este.fonte
-z
em mizzingAntigo, mas tenho motivos para refazer a resposta agora, graças a alguma confusão anterior:
Isso irá ecoar "Algo" se não houver nenhum argumento posicional $ 1. No entanto, não valida que $ 1 contenha informações específicas.
fonte
$#
é explicitamente a contagem inteira do número de argumentos; será "0" e você ecoará "algo" mesmo que não haja argumentos, ou será algum número positivo, e você ecoará "algo" corretamente. Mas a verificação em si nunca fará nada, independentemente da entrada ou da falta de entrada que você usa - ela sempre relatará que$#
contém um valor. Portanto, isso está completamente errado e nunca funcionará como afirmado.echo $#
como o conteúdo de um script /tmp/test.sh, em seguida, execute-o em / bin / bash, bem como / bin / sh (ou / bin / dash e quaisquer outras implementações de shell que você tenha disponível./tmp/test.sh
Ecoará "0" para o console, como o fará/bin/dash /tmp/test.sh
. Por outro lado,/tmp/test.sh foo
irá exibir "1" e/tmp/test.sh first second
"2".man bash
na seção "Parâmetros especiais", "O shell trata vários parâmetros de maneira especial. Esses parâmetros só podem ser referenciados; a atribuição a eles não é permitida." E "# Expande para o número de parâmetros posicionais em decimal." É igualmente exigido pelo POSIX conforme descrito em pubs.opengroup.org/onlinepubs/9699919799/utilities/…