Linux bash 脚本 - For 循环问题

Linux bash script - For loops issues

我正在编写一个 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”以便于登录。一旦我输入所有内容(正确,我可以添加)终端 window 显示以下内容。

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 in `seq 0 $((am-1))`
do
...
done

序列将从 0 开始到 $am-1

结束

我觉得我遗漏了一些东西,因为没有人建议使用 for 循环算法:

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

这在 bash 中具有特别的好处,即既可读又不需要子 shell。