Shell Script 小程式 - 利用if、read、test

利用上一篇有提到的read指令配合test指令寫的script,功用在搜尋passwd中帳號的搜尋
原始檔:(由於拍的不好,直接打上完整檔啦)

1.#!/bin/bash
2.#Descripttion:USER ACCIUNT SEARCH
3.#Author:chenry
4.echo "======================"
5.echo "USER ACCOUNT SEARCH!"
6.echo "======================"
7.read -p "Please enter a search account:" userid
8.var=/etc/passwd
9.  if test -e "$var" && grep $userid "$var" >> /dev/null; then
10.   echo "Account the existence!"
11.else
12.   exho "passwd file is not exist or [$userid] not found!"
13.fi
------------------------------------------------------

第一行到第三行都是註解的宣告,第一行比較特別是宣告要使用的bash。
第七行是提示輸入要搜尋的帳號訊息,並把輸入值存入 userid裡。
第八行是宣告變數 var 的內容為何,從上面可以看到是指 passwd這個檔案。
第九行開始是利用if test 來判斷,先用test -e  判斷passwd檔案是否存在,如果存在(也就是ture)  ,繼續執行grep 指令搜尋passwd檔中是否存在user輸入的字串,如果為真就顯示第十行否則就顯示檔案不存在或字串沒有找到。

執行結果如下:



















這是比較陽春的寫法,當然是可以在加上一些防呆的設計如果輸入為空值出現警告訊息等等。


而下面這種是稍微比較進階一點的。
















最大的差別是在原本的 if 判斷式外層又加了一層iftest -n 來判斷使用者是否為輸入空值。如果不是空值(null)才繼續進行帳號的搜尋。


下面那一行第二層判斷式:

if test -e "$var" && cat $var | cut -d ':' -f 1 | grep -w $userid 


分成三段來解說
第一段:由test -e 判斷是否有passwd的存在。
第二段:結果為真接者交由cat 顯示內容,cut  再擷取第一段的部分輸出。
第三段:grep 再根據cut擷取出的資料搜尋是否完全符合$userid的字串。


「補充」:


cut :擷取命令
-d :後面接分割字元。與 -f 一起使用。
-f  :根據 -d 的分割字元將一段分割成數段,用 -f 取出第幾段的意思。


更新:2019/06/02-已有其他篇幅介紹,偵測登入使用者後發布郵件告警。







留言