ここで私が何を間違っているのでしょうか? (ループの問題)

ここで私が何を間違っているのでしょうか? (ループの問題)

これがここにあります。

n=0
x=1
while [ $n -lt 6 ]
do
         n=$(( n+1 ))
         echo "sasadgsad gsda $n" >> /home/test/rptest

if [ $n -eq 5 ]
   then
      while [ $x -le 5 ]
      do
         echo "end of line$x" >> /home/test/rptest
         x=$(( x+1 ))
      done
 fi
done

これを出力する

sasadgsad gsda 1
sasadgsad gsda 2
sasadgsad gsda 3
sasadgsad gsda 4
sasadgsad gsda 5
end of line1
end of line2
end of line3
end of line4
end of line5
sasadgsad gsda 6

11行目はあってはいけません... n = 5のとき、最初のwhileが終わるべきではありませんか?なぜ最後の行を生成するのですか?

あなたの助けをいただきありがとうございます:)

私はn = 1を試してみましたが、while [ $ n -le 5 ]

ベストアンサー1

スクリプトに正しいインデントがあります。

n=0
x=1
while [ $n -lt 6 ]; do
    n=$(( n+1 ))
    echo "sasadgsad gsda $n" >> /home/test/rptest

    if [ $n -eq 5 ]; then
        while [ $x -le 5 ]; do
            echo "end of line$x" >> /home/test/rptest
            x=$(( x+1 ))
        done
    fi
done

外部ループは0から5まで6回実行されます。n外部ループの先頭で更新されるため、ループ本体nの値は1から6に変わります。 5の場合は、n1から5まで別のループを実行して出力しますend of line...。完了した後も、外部ループを一度繰り返す必要があります。

スクリプトを作成する別の方法は次のとおりですbash

for (( n=1; n<=5; ++n )); do
    printf 'sasadgsad gsda %s\n' "$n"

    if (( n == 5 )); then
        for (( x=1; x<=5; ++x )); do
            printf 'end of line%s\n' "$x"
        done
    fi
done >>/home/test/rptest

これはいいえn6に達すると、外部ループが停止するのと同じ問題が発生しました。

ただし、内部ループの出力を外部ループの出力に追加するには、次の手順を順次実行することもできます。

for (( n=1; n<=5; ++n )); do
    printf 'sasadgsad gsda %s\n' "$n"
done >>/home/test/rptest

for (( n=1; n<=5; ++x )); do
    printf 'end of line%s\n' "$n"
done >>/home/test/rptest

またはこの簡単な例

printf 'sasadgsad gsda %s\n' {1..5} >>/home/test/rptest
printf 'end of line%s\n' {1..5} >>/home/test/rptest

おすすめ記事