作業系統 - Linux 系統 Shell 問題請教 - 電腦

前往內容


Linux 系統 Shell 問題請教

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或其他工具說不定會更漂亮###
Dear slash410 :

前輩您好,再請教您一下,這段Script可以在Unix下執行嘛? 因為我是用Unix練習。
您先前寫的Script有幾個問題

$2 ~ /^[0-9\*]*$/ 是確認數字及符號 但是有點看不太懂 可以....大概解釋一下嘛~

LuckyStrikeQQ wrote:
前輩您好,再請教您一下,這段Script可以在Unix下執行嘛? 因為我是用Unix練習。
您先前寫的Script有幾個問題

$2 ~ /^[0-9\*]*$/ 是確認數字及符號 但是有點看不太懂 可以....大概解釋一下嘛~



是在linux下寫的,centos,
$2 ~ /^[0-9\*]*$/
就是正規表示式
$2 是awk取得的第2個欄位
/xxxxxxxx/ 當成一個區段
^是開頭
$是尾巴
[0-9]*是多個字元且都是0到9,多個\*是*的意思,\是跳出字元

口語來說... 就是第2個欄位的值全是數字或是*

1頁 (共1頁)

前往