使用bash脚本创建用户

使用bash脚本创建用户

互动脚本

该脚本应询问用户想要创建的帐户数量以及名称前缀。那么它应该创建用户指定的帐户数量,但应该跳过任何已创建的用户

即 user03 存在,如果存在则跳到下一个可用号码,即 user04 或 user05。********

这是我已经编写的脚本,但无法按应有的方式工作:

#!/bin/bash
Clear
Declare -I num
Start=1
Echo -n “Enter number of accounts to be created: “
Read num
Echo -n “Enter user prefix: (student or user)”
Read pre
Echo “”
For I in { $num }
Do
    Echo “Adding user”
    Useradd -m $pre$num
    ((num++))
done

答案1

您似乎在文字处理程序中编写了脚本,其中包含不应大写的单词(Unix 上的命令名称区分大小写),并使用了精美的印刷双引号(“...”而不是"...")。请考虑使用更简单的文本编辑器(例如nanoemacs或 )编写脚本vim。网站https://www.shellcheck.net/对于发现脚本中更简单的错误非常有帮助。

以此作为提示,所有命令名称都应为小写,并且您需要更改引号。

你的循环也有点奇怪。一方面,您似乎想要循环{ $num }(我不知道这意味着什么),另一方面,您num在循环内递增。请注意,这num是用户输入的数字,因此增加它是没有意义的。假设您更新循环中的变量:

number=1
while [ "$num" -ne 0 ]; do
   # code here that increments "number",
   # and conditionally decrements "num"
done

请记住,您必须跟踪用户名中使用的号码创建的用户数。您需要这样做才能知道何时创建了正确数量的用户,并且能够跳过系统上已存在的用户名。这里我选择递减 num直到它达到零,同时将用户名中使用的数字保留在名为 的变量中number

在循环内部,你必须尝试创建 user $pre$number,如果成功,则递减num.在每次迭代中,您总是递增number。您迭代直到num达到零,这意味着您已经创建了所有用户。

假设adduser成功和失败返回一个正常的退出状态(注意:我不是 Linux 用户,所以我不知道如果你尝试创建一个已经存在的用户,在 CentOS 上会发生什么),你可以使用添加一个用户

if adduser -m "$pre$number"; then
    # adduser succeeded, we've created a new user, decrement num
    num=$(( num - 1 ))
fi
number=$(( number + 1 ))

或者,你可以检查建议的用户名是否存在首先使用getent

if ! getent passwd "$pre$number" >/dev/null; then
    # the user don't exist, create it
    adduser -m "$pre$number"
    num=$(( num - 1 ))
fi
number=$(( number + 1 ))

getent passwd如果系统中不存在给定的用户名,则命令将失败。我们在此利用这一事实来避免使用adduser现有用户名进行调用。

我将忽略脚本开头的大部分代码,但我只是指出num不需要声明为整数,并且read -p 'prompt' var通过特定提示从用户读取值,因此echo不需要这些语句。

您可能还需要考虑这样一个事实:$pre代码中的字符串实际上被接受,即使它可能不是字符串studentuser(正如当前代码的输出表明它应该是)。

您还应该考虑$pre用户名可能无效的情况,例如,当它包含空格时。根据您编写代码的方式,如果您不检查它$pre$number是否作为用户名,这可能意味着无法创建任何帐户,或尝试创建无限数量的帐户。

相关内容