shell腳本--在帶本月日期的文件中搜索包含某個關鍵字,並返回含有關鍵字的文件
阿新 • • 發佈:2019-04-22
保存 沒有 現在 code 語句 block 當前目錄 lac 判斷語句 $i就是目前正在搜索的文件。比如當前日期是20190422,我們的文件是.txt後綴結尾的,那麽$i就有可能是
BLACKLIST_20190401.txt、BLACKLIST_20190402.txt、……BLACKLIST_20190422.txt這22個文件中的任何一個。
如果jack在,就只顯示文件名,如果不在就打印提示:在文件中XXX中沒有發現
因為工作中每天都需要根據某個關鍵字,在包含每天日期的一批文件中搜索某個關鍵字,找出這批文件中包含關鍵字的文件,並返回文件名。
本程序涉及:find命令,date命令,if循環,$符號的意義(本程序涉及在bash腳本和命令行中意義)
腳本名為h.sh,
腳本運行:
例如:我們想搜索jack在不在本月的黑名單中,就這樣執行腳本:sh h.sh jack,
# cat h.sh 1 #!/bin/sh 2 sdate=`date +%Y%m` 3 dir=`find ./ -name "BLACKLIST_${sdate}*"` 4 for i in $dir 5 do 6 if grep $1 $i ; 7 then echo $i 8 else 9 echo $i ‘>>>> no found‘ 10 fi 11done
第2行:
顯示當前日期所在年月,比如現在日期20190422,該句得到的是201904
第3行:
用find語句查找當前目錄(如果不放在文件所在的目錄要將程序中第3行的./更改為你目標文件所在目錄),所有文件名以BLACKLIST_201904開頭的文件,比如現在是201904,
則完整find語句是:find ./ -name "BLACKLIST_201904*" ,${sdate}就是201904,即一個變量值的替換
並將這些文件名放在dir變量中
5~11行:
最外層是一個循環,循環中嵌套一個if判斷語句。
第6行:
if語句是逐個判斷dir中保存的文件中是否有我們作為第一個參數送進來的。$1就是jack,當然也可以傳入多個值$2,$3……,這裏就要更改if語句了。
BLACKLIST_20190401.txt、BLACKLIST_20190402.txt、……BLACKLIST_20190422.txt這22個文件中的任何一個。
如果jack在,就只顯示文件名,如果不在就打印提示:在文件中XXX中沒有發現
shell腳本--在帶本月日期的文件中搜索包含某個關鍵字,並返回含有關鍵字的文件