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
done5、另外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,看到问题后,自己能想到什么地方有类似的代码,网上搜索来分析解析问题。
版权声明:本文为chang_chunhua原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。