添加多个新用户 - Bash Shell 脚本

Add multiple new users - Bash Shell Scripting

我希望将多个用户添加到 UNIX Red Hat 系统。我使用两个文本文件作为来源,其中包含 9 个用户名和 9 个全名,分别在 9 个新行中分隔。

$U 包含 usernames.txt,$I 包含与 -c 命令一起使用的全名,$Z 包含 1-9 的结尾数字以设置 -u 结尾值。我希望该脚本能够实现的是,它将使用我概述的值填充 useradd 命令,以使 useradd 命令执行添加用户及其用户名、评论字段(全名)和 ID 值。在系统上实际执行脚本的 useradd 命令部分之前,我使用 echo 命令测试输出是什么。但是,该脚本实际上将 fullnamecomment.txt 中的空格解释为单独的迭代,基本上该脚本打印出相同的查询 9 次,依次将 1 添加到 -u 值。

@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

修改了 SteveKline 的决议:

#!/bin/bash
Z=100101
IMPORTCSV=$(cat tabdelimituserlist.csv)
while read -r line; do
        U=$(echo $line | cut -f1 -d:)
        I=$(echo $line | cut -f2 -d:)

        echo "useradd "$U" -m -c "$I" -u "$Z""
        #useradd "$U" -m -c "$I" -u "$Z"

        #Optional since RHEL passwd permits stdin arguments
        #echo 73mp@ssw0rd | passwd --stdin "$U"

        Z=$(( $Z + 1 )) #Will increment 1 after 100100 for each user added
done <<< "$IMPORTCSV"