我正在开发一个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个用户。我浏览了用户名“callum3”并将密码设置为“1234”以便于登录。一旦我输入所有内容(正确,我可以添加),终端窗口将显示以下内容。
User 4 'callum3' added.
这表明我的for循环实际上并没有工作,当我看到它没有任何问题。我尝试过使用while循环但没有运气。
我在这里犯了一个菜鸟错误还是有更深层次的事情发生?
答案 0 :(得分:1)
虽然我怀疑它,为了更好地理解您的脚本可能出现的问题,我将其粘贴到shellcheck.net中。问题在于:
for i in {0..$am..1}
Bash不支持括号范围扩展中的变量。也就是说,您不能在{..}
等表达式中使用变量。
相反,请使用seq
。使用seq $var
,您会得到从1(默认)到$var
的序列:
for i in $(seq "$am")
答案 1 :(得分:1)
我觉得我错过了一些没有人提出循环算术的东西:
for ((i=0; i<am; i++)); do
…
done
这在bash中具有特殊的好处,既可读也不需要子shell。
答案 2 :(得分:0)
您可以使用:
for i in `seq 0 $((am-1))`
do
...
done
序列将从0开始,到$am-1