首页 > 解决方案 > 添加多个新用户 - 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

标签: bashshellfilemultiple-users

解决方案


当您嵌套循环时,这意味着您想要一遍又一遍地运行内部循环,每次外部循环发生时。这显然不是您在这里的实际意思;相反,您的代码旨在以同步方式迭代变量,将每个用户名、全名和 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

推荐阅读