这东西在这里
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,即六次。由于您n
在外循环开始时进行更新,因此n
循环体中 的值将从 1 变为 6。当n
为 5 时,您运行另一个从 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