Linux bash脚本 - For循环问题

时间:2015-04-10 15:01:24

标签: linux bash shell scripting

我正在开发一个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循环但没有运气。

我在这里犯了一个菜鸟错误还是有更深层次的事情发生?

3 个答案:

答案 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

结束