在 for 循环中迭代多个变量

在 for 循环中迭代多个变量

我正在尝试从文件向系统添加用户。该文件看起来完全像这样:

[email protected] password 1
[email protected] baddpassword 2

数字是它们的 ID。它来自 mysql db,我需要对这些变量进行一些操作,所以我需要 4 个变量。USER、PASS、FIRSTID(为 1)和 LASTID(在本例中为 mysql 转储的最后一个 ID,为 2。这是一次考虑超过 2 个条目)

到目前为止我所拥有的是这样的:

for USER in $(awk -F@ 'NR>1 {print $1}' /root/users_w_pass)
do
    for PASS in $(awk 'NR>1 {print $2}' /root/users_w_pass)
    do
        useradd $USER -d /home/$USER -m
        echo "$USER:$PASS" | chpasswd
        ...


    done
done

运行此程序时,密码不会添加到相应的用户,我不知道该怎么做,因为我认为它会起作用,但我知道它不起作用。它似乎循环了密码。此外,我正在创建文件并为每个文件分配 ACL,因此newusers在这里运行文件不起作用,尤其是还有第三列。

答案1

不想读for正确的做法是使用whilereadread如果字段由空格(空格和制表符)分隔,则内置命令可以自动解析每行的字段。该-r选项确保读取时不会解释反斜杠:

while read -r user password id; do
    # strip the @domain part from username
    user="${user%%@*}"
    useradd "$user" -d "/home/$user" -m
    echo "$user:$password" | chpasswd
    # and so on
done < your_input_file

还要注意,不要使用全大写的变量。$USER已经保留给你的用户名。

相关内容