Como faço para iterar os argumentos em um script bash?

4

Existe algum método para iterar os argumentos passados em um script bash? Esta resposta da minha pergunta mostra como usar cada argumento, mas quero iterá-los porque o número de argumentos é variável .

Eu tentei algo como:

for i in {1..10}
do
    if [[ -f "$($i)" ]]
    then
        echo "$($i) is a file"
    elif [[ -d "$($i)" ]]
    then
        echo "$($i) is a directory"
    else
        echo "$($i) is not a file or directory"
    fi
done

Mas isso me dá erros. Tentei também usar sem sucesso $$i ao invés de $($i) ...

    
por user234607 04.03.2014 / 11:40

2 respostas

7

Você deve usar $@ para se referir a todos os argumentos:

for arg in "$@"
do
    if [[ -f "$arg" ]]
    then
        echo "$arg is a file"
    elif [[ -d "$arg" ]]
    then
        echo "$arg is a directory"
    else
        echo "$arg is not a file or directory"
    fi
done

Veja também: link

    
por Radu Rădeanu 04.03.2014 / 11:54
0

O uso de while + shift parece mais versátil para mim:

while [ ! "" == "" ]; do
    case "" in
    "--mode" )
            MODE=" "
            shift
            ;;
    "--clean" )
            CLEAN=""
            ;;
    esac
    shift
done

Você pode, então, passar argumentos de tamanho variável de termos. Note que, no caso do modo, ele faz um turno extra, além daquele antes do final do loop.

    
por Alberto 04.03.2014 / 14:39

Tags