4 votes

Comment itérer les arguments dans un script de bash ?

Existe-t-il une méthode pour itérer les arguments passés dans un bash script ? Cette réponse de ma question me montre comment utiliser chaque argument, mais je veux les itérer car le nombre d'arguments est variable.

J'ai essayé quelque chose comme :

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

Mais cela me donne des erreurs. J'ai également essayé d'utiliser sans succès $$i au lieu de $($i) ...

7voto

Radu Rădeanu Points 156862

Vous devez utiliser $@ pour faire référence à tous les arguments :

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

Voir aussi : http://www.tldp.org/LDP/abs/html/internalvariables.html#ARGLIST

0voto

Alberto Points 101

L'utilisation de while + shift me semble plus polyvalent :

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

Vous pouvez alors passer des arguments de longueur variable de termes. Notez que, en cas de mode, il fait un décalage supplémentaire, en plus de celui avant la fin de la boucle.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X