我想用while创建BASH文件来创建50个用户。 但是当我运行它时我遇到了一些问题。
limite=51
num=1
while [$numero != $limite]
do
echo -n 'enter your name: ' "$num" ; read name
sudo useradd $name
num=$(($num + 1))
done
问题来自第1行和第4行
我不知道为什么!?
好吧,我有这个并且它有效
limite=51
num=1
while [ $num != $limite ] ; do
echo -n 'enter your name: ' "$num" ; read name
sudo useradd $name
num=$(($num + 1))
done
对你来说
答案 0 :(得分:1)
使用bash惯用法,您的脚本最好写成
limite=51
for ((num=1;num<limite;++num)); do
read -p "enter your name: $num" name
sudo useradd "$name"
done
或者更好(它会更快):在文件中输入所有用户名,比如user.txt
,每行一个名称,然后运行
while read name; do sudo useradd "$name"; done < user.txt
答案 1 :(得分:0)
对于想要空格的地方(执行所谓的分词),shell非常迂腐:
while [ $numero != $limite ]; do
echo ...
done
应该做的伎俩。您应该决定是否要使用$numero
或$num
...因为发布它将无效,因为$numero
未初始化使用。
一些背景:while
复合语句的语法是
while list; do list; done
列表可以是[
之类的程序(谁说程序不能有像/usr/bin/[
这样有趣的名字?)所以while
实际上调用了[
程序4个参数:$numero
,!=
的扩展,$limits
和]
的扩展(这是一个无用的参数,但使语法看起来很漂亮。)
[
计划与test
计划相同;后者不需要无用的]
参数。事实上,我更喜欢使用test
编写所有条件:
while test $numero != $limite; do
echo ...
done
另一个提示:分号;
是语句分隔符,并且前面不需要空格。
答案 2 :(得分:0)
[
实际上是一个命令,所以它需要一个空格,第4行应该是
while [ $numero != $limite ]
# See it's actually a command
$ which [
/usr/bin/[
就像catfile1
会抱怨[$numero
一样,请man test
获取更多信息,甚至是man bash
。
此外,如果这是$numero
的完整脚本,那么它应该是$num
吗?