Dear 各位前輩:
小弟剛學Shell不久,想自己寫出一個查詢Crontab的Script,嘗試了很多方式但依舊無法輸出自己想要的答案。
想各位前輩指教。
問題:想要以時間來查詢這個範圍內執行的Crontab job
########################## TEST2 ############################
#00 15 * * * /users/lucky/script/checkinfo1.sh
#00 15 * * * /users/lucky/script/checkinfo2.sh
#00 15 * * * /users/lucky/script/checkinfo3.sh
#00 15 * * * /users/lucky/script/checkinfo4.sh
#00 15 * * * /users/lucky/script/checkinfo5.sh
########################## TEST1 ###########################
#01 17 * * * /users/lucky/script/checkonline10.sh
#01 17 * * * /users/lucky/script/checkonline20.sh
#01 17 * * * /users/lucky/script/checkonline17.sh
#01 17 * * * /users/lucky/script/checkonline01.sh
#01 17 * * * /users/lucky/script/checkonline15.sh
#00 20 * * * /users/lucky/script/checkonline20.sh
#30 10,20,23 * * * /users/lucky/script/checkonline23.sh
假如我想要找尋晚上17-23所有的Crontab job,我知道要以第二欄做判斷目前自己學到的是用awk -F " " '{print $2}|grep 17方式,但就算找到了他的輸出也就只會出現全部都是17,可是我想輸出整行。
#30 10,20,23 * * * /users/lucky/script/checkonline23.sh 也無法列入判斷內,系統會把10,20,23 看成一個值,就無法判斷出來,請各位前輩給個方向,謝謝。
crontab -l | awk 'BEGIN{FS=" "}
{
#假如是數字或是*, 且>=17, 且<=20
if ($2 ~ /^[0-9\*]*$/ && ($2 >=17 && $2 <=20))
#印出整行 $L代表整行
print $L;
else
{
#假如是數字但是有逗點符號...
if ($2 ~ /^[0-9,]*$/ )
{
n=split($2,arr,","); #分割成陣列
for (i=1;i<=n;i++)
{
split(arr,brr,",");
#假如分割出來的陣列內容物有>=17, 且<=20, 就印出整行
if(brr[1] >= 17 && brr[1] <=20) print $L
}
}
}
####其實就是利用正規表示式, 它真的很強大, 寫shell或程式都要會#####
####另外..寫shell不要拘泥於只用一兩種指令或工具, 串來串去善用各種指令與工具會事半功倍###
####同樣的shell改用python或其他工具說不定會更漂亮###