Como verificar o parâmetro de entrada para executar o shell script [closed]

2

Estou escrevendo um script de shell para ser usado para vários propósitos. Várias operações dependem dos parâmetros de entrada. Como posso verificar qual parâmetro foi passado para o script de shell enquanto ele é executado?

Alguém pode explicar como essa consulta funcionará? Digamos que eu tenha 1 script de shell abc.sh , o que leva 1 parâmetro de entrada e, dependendo do seu valor, o script de shell deve ou não fazer alguma coisa. Digamos que eu tenha passado "1" como um parâmetro de entrada e planejado uma execução. Enquanto o script de shell é executado, como testo o valor do parâmetro?

    
por pankaj 11.04.2014 / 08:26

1 resposta

3

_fn() { set -- "$@" $(cat)
    while ${1+:} false ; do 
        echo "$1" && [ "$1" = "arg2" ] && echo "$1"
        $YOUR_CHK
        shift
    done
}

echo "arg2" | _fn "arg1"

OUTPUT

arg1
arg2
arg2

Que lida com os argumentos de linha de cmd e stdin . Ele só executa o loop while para verificá-los enquanto você ainda tem pelo menos um argumento salvo em sua matriz de parâmetros. Ele descarta todos os argumentos verificados, portanto, parte do $YOUR_CHK deve estar salvando as informações que você considera valiosas de uma forma ou de outra.

_fn se comportaria da mesma forma se seu conteúdo fosse o corpo de um script ou se estivesse na forma de uma função de shell.

_fn processa stdin - nesse caso "arg2" echo ed sobre o |pipe - na primeira linha por set seu array de parâmetro posicional $@ array para tudo que é passado na linha de comando - ou "$@" - E tudo cat é enviado via $(command substitution) .

O

while _fn's $1 primeiro parâmetro é ${set+} , substituímos o :true do shell para satisfazer o condicional while do loop. Assim que $1 não estiver certo de que a substituição não ocorre, a condicional será avaliada como false e o while será interrompido.

Para cada iteração do loop while , o _fn() echo es seu $1 primeiro parâmetro && se for bem-sucedido ( echo é sempre com êxito) [ tests ] para ver se $1 é igual à string "arg2" && se o [ test ] for bem-sucedido _fn() echo es $1 novamente.

$YOUR_CHK é um null-op - é uma variável indefinida que nada avalia antes mesmo de o shell executar qualquer código.

Para cada iteração do loop while , nós shift descartamos o primeiro parâmetro $1 . Então, na iteração, 1 "$@" se parece com:

arg1 arg2

Mas depois de shift , a primeira vez parece:

arg2

E depois nós shift da última vez que parece:

Então, isso nos traz de volta novamente para ${1+:} false - porque $1 agora está desanexado, o shell não substituirá :true e, em vez disso, apenas false é avaliado, que quebra o loop while e termina o _fn().

    
por 11.04.2014 / 09:07