Ignora o parâmetro no bash do Linux

1

Eu preciso escrever um script de shell que lide com 3 parâmetros ($ 1 $ 2 e $ 3). Dentro do bash eu tenho que pular o parâmetro 2 (na verdade estou escrevendo algo como ./script.sh para1 para3).

O script está correto. Mas eu não posso pular o segundo parâmetro. Como eu pulo esta?

    
por Jeroen De Meerleer 25.03.2014 / 19:37

4 respostas

0

Finalmente encontrei:

./script.sh "para1" "" "para3"

Meu professor deve estar feliz com isso. Ele não vai conseguir mais nada de mim.

    
por 25.03.2014 / 19:58
2

Não há nada como pular como você gostaria. Os argumentos são apenas numerados, se não houver um segundo parâmetro, então ... bem, na verdade não há terceiro parâmetro. Então, você explicitamente dá uma seqüência de emptry como segundo parâmetro (se o seu exercício permitir isso), ou você confere quantos parâmetros são dados e caso sejam dois, tome o segundo parâmetro como terceiro (já que é uma tarefa da escola, não entrar em detalhes aqui, basta dar uma olhada na descrição da variável $# special no manual do seu shell).

    
por 25.03.2014 / 19:59
0

O uso correto depende do contexto, o que não está claro na sua pergunta. Mas o comando para renomear os parâmetros é shift

$ help shift

shift: shift [n]
    Shift positional parameters.

    Rename the positional parameters $N+1,$N+2 ... to $1,$2 ...  If N is
    not given, it is assumed to be 1.

Você possivelmente usaria isso em um loop para processar um conjunto de argumentos. Você poderia processar o primeiro argumento como $ 1, então shift 2 e o terceiro argumento seria $ 1.

Para comandos realmente complexos, você também pode usar o getopts , que é o que você usaria com argumentos como ./command --foo blah --bar asdf .

    
por 25.03.2014 / 21:09
0

Você pode verificar a existência do seu terceiro parâmetro. Os operadores -z e -n retornam com êxito se seus argumentos estiverem vazios ou não vazios.
Além disso, em todo o script, use as variáveis para? em vez dos argumentos numerados.

para1=$1
if [ -z "$3" ]
then
    para3=$2
else
    para2=$2
    para3=$3
fi
    
por 25.03.2014 / 20:03