部分shell脚本

0x01

记录一下前段时间写过的几个小脚本,由于对命令不是很熟悉,走了一些弯路浪费了点时间。。。尴尬尴尬
不说别的了,上正文~~

###0x02

####question one :
使用参数name,在脚本中判断name是用户名还是组名,如果是用户名输出用户所属的组,包括主组和附加组;如果是组名输出组的管理员和成员列表。

先附上代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#!/bin/bash
read -p "input the string: " name
length=${#name}
a=4
var=`expr $length + $a`
id $name >& /dev/null
if [ $? -ne 0 ]
then
echo 'user not exist'
else
echo 'main group: '
groups $name | cut -d ' ' -f 1
echo ' add group: '
groups $name | cut -c $var-
fi
egrep "^$name" /etc/group >& /dev/null
if [ $? -ne 0 ]
then
echo 'group not exist'
else
cat /etc/group | grep ^$name | cut -d ':' -f 4
fi

分析:
用id命令判断是否存在,存在的话会返回用户的相关信息,反之返回0, >& 将标准输出跟错误输出一起重定向到 /dev/null (可以理解为黑洞,只进不出)
group 命令返回的结果 第一个字段是主组,剩下的是附属组,cut 命令取出第一字段,
因为要控制输出的格式,

经过测试,输出附属组要从用户名之后的第四个字符开始,所以前面那几行先获取长度,然后加4,再利用cut命令取到最后,达到目的。
/etc/group 的第四个字段就是组内的用户,先匹配到用户组为参数name那一行,然后取出第四个字段即可,
大体思路就是这样。

question two:

假设有几个文件,文件内有几列,形式为name number类似的格式,判断每个文件内name一共出现的次数,达到类似于考勤的效果,最后生成一个 ‘名字 次数’的格式的文件。
上代码:

1
2
3
4
5
6
7
8
9
10
11
#!/bin/bash
cat /root/kaoshi/*.txt > step.txt
var=`cat step.txt | cut -d "," -f 3 | sort `
for i in $var
do
echo -n "$i : " >> result.txt
echo ` cat step.txt | grep -c $i` >>result.txt
done
cat result.txt | sort | uniq > /root/tongji.txt
rm step.txt result.txt

简单分析:
获取某一个目录下所有的文件,合并到一个文件中, 然后根据需求取出想要统计的某一列,这个可以根据分隔符跟列数确定,
然后统计每一个name出现的次数,结果定向到某个中间文件,生成的中间文件对同一个name值统计了多次,所以要去重,然后生成最终想要的结果,结束以后删除中间文件
这就是思路 暂时没想到更好的方法==
e.g :处理中文文件的时候可能会因为文件格式不够严格统一或者是编码问题而出现错误,暂时没想到解决方案。。。等想到了再更新文章吧。。。。

0x03

推荐一个linux命令查询的网站,挺不错的,参数啥的很详细。
man.linuxde.net

欢迎各位dalao对文章提出意见或者建议、~~

本文标题:部分shell脚本

文章作者:tkcharlotte

发布时间:2017年07月10日 - 21:07

最后更新:2018年07月26日 - 20:07

原始链接:boombao.net/2017/07/10/shell/

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。

-------------本文结束感谢您的阅读-------------