shell——sed综合脚本应用

sed综合脚本应用

问题

本案例要求编写脚本getupwd.sh,实现以下需求:
找到使用bash作登录Shell的本地用户
列出这些用户的shadow密码记录
按每行“用户名 --> 密码记录”保存到getupwd.log,如图所示

在这里插入图片描述

方案

基本思路如下:
1)先用sed工具取出登录Shell为/bin/bash的用户记录,保存为临时文件/tmp/urec.tmp,并计算记录数量
2)再结合while循环遍历取得的账号记录,逐行进行处理
3)针对每一行用户记录,采用掐头去尾的方式获得用户名、密码字串
4)按照指定格式追加到/tmp/getuupwd.log文件
5)结束循环后删除临时文件,报告分析结果

步骤

实现此案例需要按照如下步骤进行。
步骤一:编写getupwd.sh脚本

[root@svr5 ~]# vim ./getupwd.sh  
#/bin/bash
> /tmp/getupwd.log                     				## 创建空文件
sed -n '/:\/bin\/bash$/w /tmp/urec.tmp' /etc/passwd  	## 提取符合条件的账号记录
UNUM=$(egrep -c '.' /tmp/urec.tmp)   				## 取得记录个数
while [ ${i:=1} -le $UNUM ]     					## 从第1行开始,遍历账号记录
do
    UREC=$(sed -n "${i}p" /tmp/urec.tmp)  			## 取指定行数的记录
    NAME=${UREC%%:*}         						## 截取用户名(记录去尾)
    PREC=$(sed -n "/^$NAME:/p" /etc/shadow)  		## 查找与用户名对应的密码记录
    PASS=${PREC#*:}          						## 掐头
    PASS=${PASS%%:*}            					## 去尾,只留下密码记录
    echo "$NAME --> $PASS" >> /tmp/getupwd.log 		## 保存结果
    let i++                   						## 自增1,转下一次循环
done
/bin/rm -rf /tmp/urec.tmp           				## 删除临时文件
echo "用户分析完毕,请查阅文件 /tmp/getupwd.log" 		## 完成后提示

[root@svr5 ~]# chmod +x ./getupwd.sh 

步骤二:测试、验证执行结果

[root@svr5 ~]# ./getupwd.sh   

用户分析完毕,请查阅文件 /tmp/getupwd.log

[root@svr5 ~]# less /tmp/getupwd.log 
root --> $6$IWgMYmRACwdbfwBo$dr8Yn983nswiJVw0dTMjzbDvSLeCd1GMYjbvsDiFEkL8jnXOLcocBQypOCr4C6BRxNowIxjh6U2qeFU0u1LST/
zengye --> $6$Qb37LOdzRl5995PI$L0zTOgnhGz8ihWkW81J.5XhPp/l7x2./Me2ag0S8tRndCBL9nIjHIKkUKulHxJ6TXyHYmffbVgUT6pbSwf8O71
clamav --> !!
mysql --> !!
abc --> !!
.. ..

从上述参考脚本可以发现,使用sed来实现字段提取会比较复杂。下一章课程将会学到awk命令,届时可以通过更简单的方法来改进此脚本内容。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值