O comando shell e quaisquer argumentos para esse comando aparecer como numeradas variáveis do shell: $0
tem o valor da cadeia do próprio comando, algo como script
, ./script
, /home/user/bin/script
ou o que quer. Quaisquer argumentos aparecer como "$1"
, "$2"
, "$3"
e assim por diante. A contagem de argumentos está na variável shell "$#"
.
Maneiras comuns de lidar com isso envolvem comandos getopts
e shell shift
. getopts
é muito parecido com a getopt()
função da biblioteca C. shift
move o valor de $2
para $1
, $3
para $2
e assim por diante; $#
é diminuído. O código acaba analisando o valor de "$1"
, fazer as coisas usando um case
… esac
para decidir sobre uma ação e depois fazer um shift
para passar $1
para o próximo argumento. Só tem que examinar $1
, e talvez $#
.
getopt()
é um padrão extremamente estabelecido, mas ogetopt
executável não é o mesmo na distribuição / plataforma. Agora sou umgetopts
usuário totalmente convertido , pois é um padrão POSIX. Ele funciona muito bem comdash
também, que é o meu shell script de preferênciaVocê pode acessar os argumentos passados com
$n
onden
está o número do argumento -1, 2, 3, ...
. Você passa os argumentos como faria com qualquer outro comando.fonte
Você também pode passar a saída de um script de shell como argumento para outro script de shell.
No shell script, você pode acessar argumentos com números como
$1
para o primeiro argumento e$2
para o segundo argumento e assim por diante.Mais sobre argumentos de shell
fonte
A forma
é o mais conveniente para
argv
. O delimitador de arg é um espaço em branco, mas pode ser alterado. Não me lembro de como é improvável Então usepara controlar o fluxo. Eu geralmente não adoro getopts se a
case ... esac
for suficiente.fonte
Em um script bash, eu pessoalmente gosto de usar o seguinte script para definir parâmetros:
Com essa estrutura, não confiamos na ordem dos parâmetros, pois estamos definindo uma letra-chave para cada um deles. Além disso, a função de ajuda será impressa sempre que os parâmetros forem definidos incorretamente. É muito útil quando temos muitos scripts com parâmetros diferentes para lidar. Funciona da seguinte forma:
fonte
myargument
torna-se$1
dentromyscript
.fonte
No script shell; torna-se o nome da variável $ 1. A segunda palavra se torna o nome da variável $ 2 e assim por diante.
Talvez mais seja encontrado no manual do shell (sh) em http://heirloom.sourceforge.net/sh/sh.1.html
fonte
Se você conhece Python argparse e não se importa de chamar python para analisar argumentos bash, use bash argparse ( https://github.com/mattbryson/bash-arg-parse ),
Veja a mesma resposta aqui: https://stackoverflow.com/questions/7069682/how-to-get-arguments-with-flags-in-bash-script/50181287#50181287
fonte
fonte
2> /dev/null
, 2) não adiciona nada às respostas existentes.