bash - 添加多个新用户 - Bash Shell 脚本
问题描述
我希望将多个用户添加到 UNIX Red Hat 系统。我使用两个文本文件作为源,其中包含 9 个用户名和 9 个全名,分别在 9 个新行上分隔。
$U 包含 usernames.txt,$I 包含与 -c 命令一起使用的全名,$Z 包含 1-9 的结束数字以设置 -u 结束值。我希望脚本能够实现的是,它将使用我概述的值填充 useradd 命令,以使 useradd 命令执行使用用户名、注释字段(全名)和 ID 值添加用户。在系统上实际执行脚本的 useradd 命令部分之前,我使用了 echo 命令来测试输出是什么。但是,该脚本实际上将 fullnamecomment.txt 中的空格解释为单独的迭代,并且基本上该脚本打印出相同的查询 9 次,依次将 -u 值加 1。
@Community,任何人都可以提供有关优化此脚本或更改我的方法以添加多个用户的任何输入,以在 useradd 命令中填充用户名、评论和 ID 值吗?
谢谢。
#!/bin/bash
for U in $(cat username.txt)
do
for I in $(cat fullnamecomment.txt)
do
for Z in {1..9}
do
#useradd $U -m -c $I -u 10010$Z
echo "useradd $U -m -c $I -u 10010$Z"
done
done
done
解决方案
当您嵌套循环时,这意味着您想要一遍又一遍地运行内部循环,每次外部循环发生时。这显然不是您在这里的实际意思;相反,您的代码旨在以同步方式迭代变量,将每个用户名、全名和 UID 配对。这意味着您应该只有一个循环,而不是在彼此之间嵌套多个循环。
offset=0
while IFS= read -r username <&3 && IFS= read -r fullname <&4 && (( ++offset )); do
useradd "$username" -m -c "$fullname" -u "$((100100 + offset))"
done 3<username.txt 4<fullnamecomment.txt
推荐阅读
- angular6 - 如何仅在 Angular 6 拦截器中将请求标头添加到特定域
- vagrant - Vagrant box 添加 - 无法连接到 cloud-images.ubuntu.com 端口 443:超时
- javascript - HTTP POST 403 未经授权
- sapui5 - Sap 自定义 Fiori 应用程序 LPD_CUST 附加信息是否更改?
- php - simplexml_load_file 多个等于节点
- java - org.springframework.jdbc.BadSqlGrammarException: PreparedStatementCallback;
- react-native - .catch() 在 react-native 的 fetch 中
- javascript - 获取数据快递js
- c# - Xamarin 孩子添加了多个 AbsoluteLayoutFlags
- c# - SQL 查询到 MySQL 查询