これがここにあります。
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の場合は、n
1から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
これはいいえn
6に達すると、外部ループが停止するのと同じ問題が発生しました。
ただし、内部ループの出力を外部ループの出力に追加するには、次の手順を順次実行することもできます。
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