2016-11-29 1 views
1

Im for-Schleife in Shell-Skript verschachtelt zu verwenden versuchen, eine Ausgabe wie unten zu bekommen:For-Schleife in Shell-Skript Verschachtelte

i=1 j=1 iteration 1 
i=2 j=2 iteration 2 
i=3 j=1 iteration 3 
i=4 j=2 iteration 4 
i=5 j=1 iteration 5 
i=6 j=2 iteration 6 

So etwas wie

for ((i=1; i <= 6;i++)) 
do 
     for ((j=1;j<2;j++)) 
     do 
     echo i=$i;echo j=$j;echo iteration $i 
     ... 
     done 
done 
+0

Was Ihre Frage ist? Fragen Sie, wie man "j" zwischen 1 und 2 wechselt, je nachdem, ob "i" ungerade oder gerade ist? – yelsayed

+0

Dies ist nicht viel von einer Nested Loop-Frage. Mehr von einer gerade/ungerade für "$ j" Frage – NinjaGaiden

+0

Ich möchte j zwischen 1 und 2 wechseln, aber es hängt nicht davon ab, ob ich gerade oder ungerade bin. – Gunner

Antwort

0

In Bash/Zsh/ksh93 (mindestens):

let iter=0 

for ((i=1; i <= 6;)) 
do 
    for ((j=1; j<=2; j++, i++)) 
    do 
    printf "i=%d j=%d iteration %d\n" $i $j $((++iter)) 
    done 
done 

Ausg ut

i=1 j=1 iteration 1 
i=2 j=2 iteration 2 
i=3 j=1 iteration 3 
i=4 j=2 iteration 4 
i=5 j=1 iteration 5 
i=6 j=2 iteration 6 

und die folgenden sollte auch in der Standard-Befehlssprache arbeiten:

iter=0 
i=0 

while ((i <= 6)) 
do 
    j=0 
    while ((++j <= 2 && ++i <= 6)) 
    do 
    printf "i=%d j=%d iteration %d\n" $i $j $((++iter)) 
    done 
done 
0
#!/usr/bin/env bash 

for i in `seq 1 6`; do 
     if [[ $((i%2)) -eq 1 ]]; then 
       echo "i=$i j=1 iteration $i" 
     else 
       echo "i=$i j=2 iteration $i" 
     fi 

done 
Verwandte Themen