【问题标题】:Add multiple new users - Bash Shell Scripting添加多个新用户 - Bash Shell 脚本
【发布时间】:2021-11-15 07:55:50
【问题描述】:

我希望将多个用户添加到 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

【问题讨论】:

  • 另外,如果您希望username.txt 的第一行与fullnamecomment.txt 的第一行匹配,则每个文件的第二行与另一个文件的第二行匹配,等等,你根本不应该使用嵌套循环。如果这你想要做的,明确说明,我可以挖掘一个现有的描述该技术的问答问题。
  • 顺便说一句,要显示您对某人答案的修改,请使用“添加答案”按钮添加您自己的答案,而不是在问题中编辑答案。请参阅Meta Stack Exchange 上的讨论,包括What to do when OP answers his/her own question in an edit?Should I update my question to include the correct answer?
  • 谢谢查尔斯!我已经更新了我的问题并添加了一个修改 SteveKlines 分辨率的答案,以使其在我的系统上运行。感谢 CharlesDuffy 和 SteveKline 抽出时间做出回应。非常感激!我希望有一天能回答您的一个问题并回报您的青睐!保重。

标签: bash shell file multiple-users


【解决方案1】:

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

【讨论】:

  • 非常感谢您抽出宝贵时间回复。您的回复完美运行,无需任何修改,并将其标记为答案。
【解决方案2】:

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"

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2015-09-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-02-23
  • 2018-09-03
  • 2018-10-12
  • 2012-01-28
相关资源
最近更新 更多