Como escrever um script para aceitar qualquer número de argumentos de linha de comando? (UNIX, BASH)

1

Eu tenho um script que quero aceitar qualquer número de argumentos de linha de comando.

Até agora eu tenho

if [ -O $1 ] ; then
  echo "you are the owner of $1"
else
  echo "you are not the owner of $1"
fi

Obviamente, se eu quisesse que o script aceitasse apenas um argumento, isso funcionaria, mas o que funcionaria para QUALQUER número de argumentos.

ex.  ./script f f1 f2 f3
    
por Jeff Atwood 08.10.2009 / 01:39

3 respostas

10

Uma maneira possível de fazer o que você quer envolve $@ , que é uma matriz de todos os argumentos transmitidos.

for item in "$@"; do
  if [ -O "$item" ]; then
    echo "you are the owner of $item"
  else
    echo "you are not the owner of $item"
  fi
done
    
por 08.10.2009 / 01:49
3

Bem, depende exatamente do que você quer fazer, mas veja em $* , $@ e shift .

    
por 08.10.2009 / 01:48
2

"$ @" não resolve o problema de "QUALQUER número de argumentos". existe um limite em quanto tempo uma linha de comando pode ser ( link ). uma maneira melhor de ler "argumentos ilimitados" é via STDIN:

prg_which_creates_arguments | while read a; do \
    echo "do something with $a"; \
done

apenas crie os argumentos e canalize-os um após o outro no código que está fazendo algo com eles.

    
por 11.10.2009 / 12:27