2

我想创建 BASH 文件以使用 while 创建 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

谢谢你

4

3 回答 3

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
于 2012-12-20T12:17:16.323 回答
0

shell 对于它在哪里需要空格(执行所谓的分词)非常迂腐:

while [ $numero != $limite ]; do
  echo ...
done

应该做的伎俩。并且您应该决定是否要使用$numero$num...如发布的那样它将不起作用,因为$numero未初始化使用。

一些背景:while复合语句的语法是

while list; do list; done

列表可以是类似的程序(谁说[程序不能有像看起来不错。)/usr/bin/[while[$numero!=$limits]

程序与程序[相同test;后者不需要无用的]论点。事实上,我更喜欢使用以下方式编写所有条件test

while test $numero != $limite; do
  echo ...
done

另一个提示:分号;语句分隔符,前面不需要空格。

于 2012-12-20T09:40:29.840 回答
0

[实际上是一个命令,所以它后面需要一个空格,第 4 行应该是

while [ $numero != $limite ]

# See it's actually a command
$ which [        
/usr/bin/[

就像catfile1会抱怨一样[$numero,做man test更多的信息甚至man bash

此外,如果这是完整的脚本$numero,应该是$num什么?

于 2012-12-20T09:41:32.570 回答