![如何创建迭代次数可变的 for 循环?](https://linux22.com/image/80379/%E5%A6%82%E4%BD%95%E5%88%9B%E5%BB%BA%E8%BF%AD%E4%BB%A3%E6%AC%A1%E6%95%B0%E5%8F%AF%E5%8F%98%E7%9A%84%20for%20%E5%BE%AA%E7%8E%AF%EF%BC%9F.png)
当用户在开始时指定 n 时,如何迭代循环 n 次?
我编写了一个 shell 脚本,需要将其中的某个部分重复 n 次(取决于用户希望的次数)。
到目前为止我的脚本如下所示:
echo "how many times would you like to print Hello World?"
read num
for i in {1.."$num"}
do
echo "Hello World"
done
如果我将“num”更改为“5”等数字,则循环可以工作,但是我需要能够让用户指定迭代循环的次数。
答案1
您可以使用seq
for i in $(seq 1 "$num")
或者你的 shell 可能支持 C 风格的循环,例如在 bash 中
for ((i=0; i<$num; i++))
答案2
echo "how many times would you like to run your loop ?"
read max
i=0
while [ "$((i+=1))" -le "$max" ]
do
# whatever you want to do here
done
答案3
使用“算术求值”(仅限 bash):
read -p "how many times would you like to print Hello World? " max
i=0
while (( i++ < max ))
do
echo "$i, Hello World."
done
或者如果您想让程序更加健壮,请使用它。
这将从输入中仅提取数字。除了可能需要很长时间才能处理的非常大的数字之外,任何其他输入都将在使用之前进行清理。
while (( i++ < ${max//[^0-9]} ))
答案4
还有另一种方式与{1.."$num"}
.在将其转移到 for 循环之前,需要评估 Bash 扩展。您可以通过这种方式使用扩展语法来使其工作:
for i in $(eval echo {1.."$num"});
do
echo $i;
done