我在这里做错了什么(循环问题)

我在这里做错了什么(循环问题)

这东西在这里

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

相关内容