sed綜合腳本應用

1.1 問題

本案例要求編寫腳本getupwd.sh,實現以下需求:

找到使用bash作登錄Shell的本地用戶
列出這些用戶的shadow密碼記錄
按每行“用戶名 --> 密碼記錄”保存到getupwd.log,如圖-1所示

在這裏插入圖片描述
圖-1
1.2 方案

基本思路如下:

先用sed工具取出登錄Shell爲/bin/bash的用戶記錄,保存爲臨時文件/tmp/urec.tmp,並計算記錄數量
再結合while循環遍歷取得的賬號記錄,逐行進行處理
針對每一行用戶記錄,採用掐頭去尾的方式獲得用戶名、密碼字串
按照指定格式追加到/tmp/getuupwd.log文件
結束循環後刪除臨時文件,報告分析結果

1.3 步驟

實現此案例需要按照如下步驟進行。

步驟一:編寫getupwd.sh腳本

[root@svr5 ~]# vim ./getupwd.sh  
#/bin/bash
A=$(sed -n '/bash$/s/:.*//p' /etc/passwd)             ## 提取符合條件的賬號記錄
for i in  $A                                         ##遍歷賬號記錄
do
    pass1=$(grep $i /etc/shadow)
    pass2=${pass1#*:}
    pass=${pass2%%:*}
    echo  "$i   --> $pass"
done
[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命令,屆時可以通過更簡單的方法來改進此腳本內容。

總結知識點:

#sed [選項] ‘條件指令’ 文件

選項:

-n 屏蔽默認輸出

-r 支持擴展正則

-i 修改源文件

條件:

行號 4 4,5 4~2 4,+10

/正則/

指令:

p 打印

d 刪除

s 替換s/舊/新/g

a 追加

i 插入

c 替換行

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章