2017-10-14 21 views
0

Je suis en train d'écrire un script qui accepte un certain nombre de fichiers comme arguments et pour chaque fichier, affiche un message:en boucle à travers les paramètres dans bash

La taille de FILENAME est de taille kilooctets

Je me bats sur la façon de référencer les paramètres dans la boucle while

c'est mon code

i=1 
while [ $i -le $# ] 
do 
echo "The size of $(du -s $1 | cut -f2) is $(du -s $1 | cut -f1) kilobytes" 
i=$((i+1)) 
done 

Répondre

1

Ove Juste itérer r les valeurs, pas l'indice. Notez que tout est shell standard POSIX.

for i in "[email protected]"; do 
    # Run du once, no need for cut 
    read -r size dir <<EOF 
$(du -s "$i") 
EOF 
    echo "The size of $dir is $size kilobytes" 
done 

Vous pouvez remplacer le document en une ici chaîne dans bash:

read -r size dir <<< "$(du -s "$i")" 
+0

La forme canonique pour itérer sur tous les arguments est 'je do' (' pour i; do' est également accepté par tous les shells que je connais.) – rici

+0

Non, c'est un raccourci pour si vous omettez la séquence explicite pour itérer. – chepner

+0

Cela fonctionne parfaitement, mais je ne pouvais pas comprendre ce que fait EOF – Ahmad