Como pasar argumentos a un script Bash

Comandos, sintaxe e exemplos

Pode escribir un script bash de tal forma que reciba os argumentos especificados cando se chame o script da liña de comandos. Este método úsase cando un script ten que realizar unha función un pouco diferente segundo os valores dos parámetros de entrada (os argumentos).

Por exemplo, pode ter un script chamado "stats.sh" que executa unha operación particular nun ficheiro, como contar as súas palabras. Se desexa usar ese script en moitos ficheiros, o mellor é pasar o nome do ficheiro como argumento, de maneira que pode usar o mesmo script para todos os ficheiros a procesar. Por exemplo, se o nome do ficheiro a procesar é "songlist", ingresaría a seguinte liña de comandos:

sh stats.sh timbre

Accede aos argumentos dentro dun script empregando as variables $ 1, $ 2, $ 3, etc., onde $ 1 fai referencia ao primeiro argumento, $ 2 ao segundo argumento, etc. Isto queda ilustrado no seguinte exemplo:

FILE1 = $ 1 wc $ FILE1

Para lexibilidade, asigne unha variable cun nome descritivo ao valor do primeiro argumento ($ 1) e, a continuación, chame a utilidade de reconto de palabras ( wc ) sobre esta variable ($ FILE1).

Se ten un número variable de argumentos, pode usar a variable "$ @", que é unha matriz de todos os parámetros de entrada. Isto significa que pode usar un for-loop para procesar iterativamente cada un, como se ilustra no seguinte exemplo:

para FILE1 en "$ @" fai wc $ FILE1 feito

Aquí tes un exemplo de como chamar a este script con argumentos da liña de comandos:

sh stats.sh songlist1 songlist2 songlist3

Se un argumento ten espazos, ten que incluílo con comiñas simples. Por exemplo:

sh stats.sh 'songlist 1' 'songlist 2' 'songlist 3'

Frecuentemente un script está escrito de tal forma que o usuario pode pasar argumentos en calquera orde usando bandeiras. Co método de bandeiras, tamén podes facer algúns dos argumentos opcionais.

Permitir dicir que ten un script que recupera información dunha base de datos en función de parámetros especificados, como "nome de usuario", "data" e "produto" e xera un informe nun "formato" especificado. Agora desexa escribir o seu script para que poida pasar nestes parámetros cando se chame o script. Pode parecer así:

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

Bash habilita esta funcionalidade coa función "getopts". Para o exemplo anterior, podes usar getopts do seguinte xeito:

Este é un ciclo de tempo que usa a función "getopts" e unha chamada "optstring", neste caso "u: d: p: f:", para repetir os argumentos. O ciclo while percorre o optstring, que contén as bandeiras que se poden usar para pasar argumentos e asigna o valor de argumento fornecido para esa bandeira á variable "option". A instrución do caso atribúe entón o valor da "opción" variable a unha variable global que se pode usar despois de ler todos os argumentos.

Os colóns no optstring significan que se requiren valores para os indicadores correspondentes. No exemplo anterior todas as bandeiras son seguidas por dous puntos: "u: d: p: f:". Isto significa que todas as bandeiras precisan un valor. Se, por exemplo, non se esperaba que tivesen un valor as bandeiras "d" e "f", o optstring sería "u: dp: f".

Un dos puntos ao comezo do optstring, por exemplo ": u: d: p: f:" ten un significado completamente diferente. Permite manexar bandeiras que non están representadas no optstring. Nese caso, o valor da variable "opción" está definido como "?" eo valor de "OPTARG" está configurado na bandeira inesperada. O permítelle amosar unha mensaxe de erro adecuada informando ao usuario do erro.

Os argumentos que non están precedidos por unha bandeira son ignorados por getopts. Se os bandeiras especificados no optstring non se fornecen cando se chama o script, non pasa nada, a non ser que, especialmente, xestione este caso no seu código. Calquera argumento non manexado por getops aínda pode ser capturado coas variables normais $ 1, $ 2, etc.