Skip to main content

Como passar argumentos para um script Bash

Shell Scripting - Ler dados do teclado - Parâmetros de Linha de Comando - 23 - Linux (Abril 2025)

Shell Scripting - Ler dados do teclado - Parâmetros de Linha de Comando - 23 - Linux (Abril 2025)
Anonim

Você pode escrever um script bash de forma que receba argumentos especificados quando o script é chamado a partir da linha de comando. Esse método é usado quando um script precisa executar uma função ligeiramente diferente, dependendo dos valores dos parâmetros de entrada (os argumentos).

Por exemplo, você pode ter um script chamado "stats.sh" que executa uma operação específica em um arquivo, como contar suas palavras. Se você quiser usar esse script em muitos arquivos, é melhor passar o nome do arquivo como um argumento, para poder usar o mesmo script para todos os arquivos a serem processados. Por exemplo, se o nome do arquivo a ser processado for "songlist", você digitaria a seguinte linha de comando:

Lista de músicas de sh stats.sh

Argumentos são acessados ​​dentro de um script usando as variáveis ​​$ 1, $ 2, $ 3, etc., onde $ 1 se refere ao primeiro argumento, $ 2 ao segundo argumento e assim por diante. Isto é ilustrado no exemplo seguinte:

FILE1 = $ 1wc $ FILE1

Para facilitar a leitura, atribua uma variável com um nome descritivo ao valor do primeiro argumento ($ 1) e, em seguida, chame o utilitário de contagem de palavras (wc) nessa variável ($ FILE1).

Se você tem um número variável de argumentos, você pode usar a variável "$ @", que é uma matriz de todos os parâmetros de entrada. Isso significa que você pode usar um loop for para processar iterativamente cada um, conforme ilustrado no exemplo a seguir:

para FILE1 em "$ @"Fazwc $ FILE1feito

Aqui está um exemplo de como chamar esse script com argumentos da linha de comando:

sh stats.sh songlist1 lista de músicas2 songlist3

Se um argumento tiver espaços, será necessário incluí-lo entre aspas simples. Por exemplo:

sh songs.sh 'lista de músicas 1' 'lista de músicas 2' 'lista de músicas 3'

Frequentemente, um script é escrito de forma que o usuário possa passar argumentos em qualquer ordem usando sinalizadores. Com o método flags, você também pode tornar alguns dos argumentos opcionais.

Vamos dizer que você tem um script que recupera informações de um banco de dados com base em parâmetros especificados, como "nome de usuário", "data" e "produto", e gera um relatório em um "formato" especificado. Agora você quer escrever seu script para poder passar esses parâmetros quando o script for chamado. Pode parecer assim:

makereport -u jsmith -p cadernos -d 10-20-2011 -f pdf

O Bash ativa essa funcionalidade com a função "getopts". Para o exemplo acima, você poderia usar getopts da seguinte maneira:

enquanto getopts u: d: p: f: opçãoFazcaso "$ {option}"emu) USER = $ {OPTARG} ;;d) DATA = $ {OPTARG} ;;p) PRODUTO = $ {OPTARG} ;;f) FORMAT = $ OPTARG ;;esacfeito

Este é um loop while que usa a função "getopts" e o chamado "optstring", neste caso "u: d: p: f:", para iterar através dos argumentos. O loop while percorre o optstring, que contém os sinalizadores que podem ser usados ​​para transmitir argumentos e atribui o valor do argumento fornecido para esse sinalizador à variável "option". A declaração de caso, em seguida, atribui o valor da variável "option" a uma variável global que pode ser usada depois que todos os argumentos tiverem sido lidos.

Os dois pontos na optstring significam que os valores são necessários para os sinalizadores correspondentes. No exemplo acima, todos os sinalizadores são seguidos por dois pontos: "u: d: p: f:". Isso significa que todos os sinalizadores precisam de um valor. Se, por exemplo, não se esperasse que os flags "d" e "f" tivessem um valor, o optstring seria "u: dp: f".

Um cólon no início do optstring, por exemplo ": u: d: p: f:", tem um significado completamente diferente. Ele permite que você manipule sinalizadores que não estão representados na optstring. Nesse caso, o valor da variável "option" é definido como "?" e o valor de "OPTARG" é definido para o sinalizador inesperado. O permite exibir uma mensagem de erro adequada informando o usuário sobre o erro.

Argumentos que não são precedidos por um sinalizador são ignorados por getopts. Se os sinalizadores especificados na optstring não forem fornecidos quando o script for chamado, nada acontece, a menos que você manipule especialmente esse caso em seu código. Quaisquer argumentos não tratados pelos getops ainda podem ser capturados com as variáveis ​​regulares $ 1, $ 2, etc.