Linux bash脚本 – For循环问题

我正在处理一个bash脚本,将在批处理过程中添加用户。 这段代码如下所示:

#!/bin/bash # A script that creates users. echo "This is a script to create new users on this system." echo "How many users do you want to add?" read am echo " " for i in {0..$am..1} do echo "Enter a username below:" read usern sudo useradd $usern sudo passwd $usern echo " " echo "User $am '$usern' added." done 

在这种情况下,我想让4个用户。 我经过并input用户名“callum3”,并设置密码为“1234”,以方便login。 一旦我input了一切(正确的,我可以添加)terminal窗口显示以下内容。

 User 4 'callum3' added. 

这表明我的for循环实际上并没有工作,当我看不出有什么问题的时候。 我曾尝试使用一个while循环没有运气那里要么。

我在这里做菜鸟的错误,还是有更深层次的事情呢?

虽然我怀疑它,但是为了更好地理解脚本中可能出现的错误,我将它粘贴到了shellcheck.net中 。 问题在于:

 for i in {0..$am..1} 

Bash不支持大括号范围扩展中的变量。 也就是说,不能在像{..}这样的表达式中使用变量。

相反,使用seq 。 使用seq $var您可以获得从1(默认)到$var的序列:

 for i in $(seq "$am") 

我觉得我错过了一些东西,没有人提出了一个算术循环:

 for ((i=0; i<am; i++)); do … done 

这在可读性和不需要子shell的情况下具有特别的好处。

您可以使用:

 for i in `seq 0 $((am-1))` do ... done 

序列将从0开始并以$am-1结束