Finalmente encontrei:
./script.sh "para1" "" "para3"
Meu professor deve estar feliz com isso. Ele não vai conseguir mais nada de mim.
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?
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).
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
.
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