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。
我正在编写一个 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。