我正在处理一个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
结束