Recuperando argumentos passados para um script shell (Linux/Bash)

Uma parte importante de ser fazer um script é conseguir pegar os argumentos que são passados via linha de comando. Neste post vou mostrar como recuperar estes argumentos.

Conseguir as informações passadas via linha de comando é bem simples. Considere o exemplo abaixo:

Neste exemplo, foram passados os seguintes argumentos para o script:

  1. foo
  2. bar
  3. bacon bacon bacon
  4. 42
  5. 12.84

Ok, mas como recuperar estes valores dentro do script?

 

Recuperando argumentos passados via linha de comando

Simples, basta utilizar $1 para o primeiro argumento, $2 para o segundo, $3 para o terceiro, $4 para o quarto e $5 para o quinto.  A variável $0 ($ zero) sempre armazena o nome do script que está sendo executado.

Um exemplo disso:

 

O resultado da execução de um script com o código acima e a linha que comando que estamos utilizando como exemplo teria o seguinte resultado:

 

Recuperando a quantidade de argumentos

Neste caso, eu ja sabia quantos argumentos estavam sendo passados, mas se você quiser ter este número, basta buscar o valor da variável $#. Atualizando nosso script de teste para mostrar o número de argumentos:

A diferença é que adicionei a linha: echo “Qty args: $#

Ao executarmos o este script novamente, com a mesma linha de comando, teremos o seguinte resultado:

 

Fazendo uma iteração entre os argumentos

Para deixar as coisas mais dinâmicas um pouco, vou mostrar como fazer um loop pelos argumentos passados via linha de comando…

No script acima, os dois primeiros comandos echo mostram (respectivamente) a quantidade de argumentos e o nome do script.

Na sequencia, faço um loop pelo vetor que armazena os argumentos passados. Este vetor é referenciado pela variável $@.

A variável i foi criada apenas para mostrar o número da variável que estamos lendo.

 

Verificando uma flag na linha de comando

Até este momento, já mostrei como ler os argumentos que são passados, como verificar a quantidade de argumentos e como fazer uma iteração pelos argumentos.  Agora vou mostrar uma aplicação um pouco mais real deste procedimento. Vou alterar o script criado anteriormente para procurar o argumento “-flag“. Quando executado, o script vai informar se encontrou ou não o argumento -flag.

Script alterado:

No exemplo acima, a lógica do loop é a mesma. A diferença é que inclui uma verificação se o argumento que está sendo lido naquela interação do loop (“$arg”) é igual a “-flag”.

Espero ter ajudado.

The following two tabs change content below.
Breno RdV
Ex-Psicólogo, com quase uma década de experiência em Recursos Humanos e Gestão de Pessoas, atual desenvolvedor e Analista de Sistemas, trabalhando com PowerBuilder, C#, PowerShell e expandindo horizontes para Python, Xamarin, PHP, Angular e (por que não?) Unity.

Comments

comments

Posted in Dev, Linux/Bash and tagged , , , .