批量添加用户组并加用户进组的一个例子

 

2022年开始,工作上有个项目需求是这样的:

groupusers.txt

group1:user1:user2:user3:user4
group2:user2
group3:user2:user3:user4
group4:user5:user6:user7

每行的第一列是group组名,然后后面都是用户,分隔符是冒号。

有个前提是:用户已经通过useradd的命令全部都加到了系统当中了。

分析:

1、开始使用shell读取文件的代码:

for line in 'cat groupusers.txt`
do
    echo $line
done

获得了每行的内容。

2、然后我这边通过命令:

cut -d:-f1 $line 

想获得group组,发现是有问题的。cut命令后面是针对的每个文件,而不是某行,我这边的行的内容,其实已经变成了字符串的处理了。

3、那么我就开始集中看字符串该如何进行分段获取。如何获取group呢?网上正好有

http://www.hao123.com:80

有字符串处理的相关的例子,根据这个就可以获取到group组名的内容了。

整个字符串这块的处理,还是有点意思的。

4、Shell通过分隔符获取字符串的内容:可以参考这段代码。

#!/bin/bash
string="hello,shell,haha"  
array=(${string//,/ })  
for var in ${array[@]}
do
   echo $var
done

5、另外shell调试的命令,我这边再写下:

sh -x groupaddusers.sh

最终的脚本内容:

#!/bin/bash
#
#

for line in `cat groupusers.txt`
do
        groupname=${line%%:*}
        echo $groupname
        users=${line#*:}
        echo $users
        array=(${users//:/ })
        for username in ${array[@]}
        do
                echo $username
                gpasswd -a $username $groupname
                echo "Add user to group successfully."
        done
done

最后通过调试和测试,检查发现代码功能正常。

总结:

这段时间学习shell,并编写shell。感觉还是要平时多写shell,多接触shell,看到问题后,自己能想到什么地方有类似的代码,网上搜索来分析解析问题。

你可能感兴趣的:(Shell,Linux系统,linux,shell)