2017-10-14 12 views
0

ich ein Drehbuch schreibe, die eine bestimmte Anzahl von Dateien als Argumente und für jede Datei akzeptiert, gibt eine Meldung aus:durch Parameter in bash Looping

Die Größe der Datei Größe Kilobyte

ich kämpfen bin auf, wie die Parameter innerhalb der while-Schleife referenzieren

dies ist mein 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 

Antwort

1

Gerade Iterierte ove r die Werte, nicht der Index. Beachten Sie, dass dies alles POSIX-Standard Shell ist.

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 

Sie können mit einer hier Zeichenfolge in bash die hier Dokument ersetzen:

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

Die kanonische Weise ist es, alle Argumente iterieren 'für i do' (' für i; do' wird auch akzeptiert von allen Shells, die ich kenne.) – rici

+0

Nein, das ist eine Abkürzung für, wenn Sie die explizite Sequenz weglassen, um darüber zu iterieren. – chepner

+0

Es funktioniert perfekt, aber ich konnte nicht verstehen, was EOF tun – Ahmad