Linux 从txt文件添加用户
我有一个项目,包括向操作系统添加用户,这些用户位于文本文件中。 到目前为止,我已经写了这篇文章,但它不起作用。 你能告诉我怎么了吗 文件Linux 从txt文件添加用户,linux,bash,scripting,Linux,Bash,Scripting,我有一个项目,包括向操作系统添加用户,这些用户位于文本文件中。 到目前为止,我已经写了这篇文章,但它不起作用。 你能告诉我怎么了吗 文件user.txt为: charbel:password:1001:1001:charbel Haddad:/home/charbel:/bin/bash:0:30:15:7:y 阿塞尔:p@ssw0rd:1002:1002:Assil:/home/assel:/bin/bash:0:30:10:5:n 马尔万:p@ssw0rd:1003:1003:Marwan
user.txt
为:
charbel:password:1001:1001:charbel Haddad:/home/charbel:/bin/bash:0:30:15:7:y
阿塞尔:p@ssw0rd:1002:1002:Assil:/home/assel:/bin/bash:0:30:10:5:n
马尔万:p@ssw0rd:1003:1003:Marwan Ghantous:/home/Marwan:/bin/bash:0:50:30:7:n
米歇尔:密码:1004:1004:michel:/home/michel:/bin/bash:1:30:10:5:y
脚本:
FILE="user.txt"
USERNAME=$(cut -d " " -f 1 $FILE)
PASSWORD=$(cut -d " " -f 2 $FILE)
USER_ID=$(cut -d " " -f 3 $FILE)
GROUP_ID=$(cut -d " " -f 4 $FILE)
USER_INFO=$(cut -d " " -f 5 $FILE)
HOME_DIRECTORY=$(cut -d " " -f 6 $FILE)
SHELL=$(cut -d " " -f 7 $FILE)
MIN=$(cut -d " " -f 8 $FILE)
MAX=$(cut -d " " -f 9 $FILE)
INACTIVE=$(cut -d " " -f 10 $FILE)
WARNING=$(cut -d " " -f 11 $FILE)
useradd -m -c "${USERNAME}" "${PASSWORD}" "${USER_ID}" "${GROUP_ID}" "${USER_INFO}" "${HOME_DIRECTORY}" "${SHELL}" "${MIN}" "${MAX}" "${INACTIVE}" "${WARNING}"
与调用
useradd
相关的任何问题无关,从数据文件提取数据的方式存在多个问题:
cut-d”“
在空格上拆分$USERNAME
中的值将包含4个名称,每行一个IFS=:
并在循环中使用read
读取字段并处理结果。您可能会得到一个有点像这样的脚本:
#!/bin/bash
IFS=:
while read -r usename password user_id group_id user_info home shell min max inactive warning
do
echo useradd -m -c "$usename" "$password" "$user_id" "$group_id" \
"$user_info" "$home" "$shell" "$min" "$max" "$inactive" "$warning"
done < data
现在,这是否是对useradd
的有效调用,这是另一个问题,但至少正确的数据正在被处理
从RHEL7.4上的useradd
手册页判断(这恰好是我可以访问的方便的Linux系统),调用的格式严重错误。这些值的前缀通常需要加上一个选项,例如上面指定的$user\u info
变量中的“comment”字段的--comment
或-c
。在AFAICS中,用户名应该排在最后,没有特定的选项前缀。但关键的部分是读取数据
以root
的身份运行useradd--help
用法:用户添加[选项]登录
用户添加-D
useradd-D[选项]
选项:
-b、 --base dir base\u dir base directory,用于
新帐户
-c、 --新帐户的注释GECOS字段
-d、 --home dir home\u dir新帐户的主目录
-D、 --默认打印或更改默认用户添加配置
-e、 --过期日期新帐户的过期日期
-f、 --新帐户的非活动密码非活动期
-g、 --新组的主组的gid组名称或ID
账户
-G、 ——新项目的补充组列表
账户
-h、 --帮助显示此帮助消息并退出
-k、 --skel skel_DIR使用此备用骨架目录
-K、 --key key=VALUE override/etc/login.defs默认值
-l、 --no log init不将用户添加到lastlog中,并且
故障日志数据库
-m、 --创建主目录创建用户的主目录
-M、 --不创建主目录不创建用户的主目录
-N、 --无用户组不创建与相同名称的组
用户
-o、 --非唯一允许创建重复用户
(非唯一)UID
-p、 --密码新帐户的加密密码
-r、 --系统创建一个系统帐户
-R、 --根目录CHROOT\u DIR目录到CHROOT目录
-s、 --新帐户的shell登录shell
-u、 --新帐户的用户ID
-U、 --用户组创建与用户同名的组
-Z、 --selinux用户SEUSER为selinux用户映射使用特定的SEUSER
您可以使用带有适当值的
-K
选项来指定密码更改之间的最短和最长天数。您进行过任何调试吗?例如,您是否打印了变量值以检查它们是否符合您的期望?请在问题中添加user.txt(无链接,无评论)。@Cyrus:no-这是关于shell编程的,主题是堆栈溢出。这是您的问题;文件中的字段是分隔的:,但您告诉cut
使用空格作为分隔符。使用cut
也会使每个变量成为一个值列表。您想使用read
分别拆分每一行。
$ bash script.sh
useradd -m -c charbel password 1001 1001 Charbel Haddad /home/charbel /bin/bash 0 30 15 7:y
useradd -m -c assil p@ssw0rd 1002 1002 Assil /home/assel /bin/bash 0 30 10 5:n
useradd -m -c marwan p@ssw0rd 1003 1003 Marwan Ghantous /home/marwan /bin/bash 0 50 30 7:n
useradd -m -c michel password 1004 1004 Michel /home/michel /bin/bash 1 30 10 5:y
$