2014-09-26 52 views
0

我有一個名爲mycronfile crontab文件:正則表達式動態變量

#30 07 03 09 RAB root bash /media/data/test1.sh 
#* * * * * root bash /media/data/test2.sh 
30 07 * * * root bash /media/data/test3.sh 

我試圖增加新的線路,但只有當他們不存在。這是我的代碼:

while read $line; do 
    com1=$(echo $line | awk '{ print $8 }') 
    com2=$(echo $line | awk '{ print $7 }') 
    fullCom=$(echo "$com2 $com1") 
    fixMin=$(echo $line | awk '{ print $1 }') 
    fixHour=$(echo $line | awk '{ print $2 }') 
    fixDate=$(echo $line | awk '{ print $3 }') 
    fixMonth=$(echo $line | awk '{ print $4 }') 

    actv=`echo "$fixMin $fixHour $fixDate $fixMonth $fixDay $user $fullCom"` 

    if grep "$actv" tempcron; then 
    echo "data in tempcron exist" 
    echo "$actv" > /dev/null 
    else 
    echo "data input into file" 
    echo "$actv >> tempcron" 
    fi 
done < myfilecron 

我每次執行腳本,在tempcron數據總是重複。當然,我需要mycronfilegrep以正確的模式來避免重複。但如何與grep它與正則表達式?因爲行包含星號(*)時出現問題。

+0

所以你要確保'$ var'不包含的數字? – 2014-09-26 07:54:02

+0

它可以包含數字或不包含數字。如果值包含數字,則不存在任何問題,但當值不包含數字時會出現問題。 – 2014-09-26 07:58:21

+2

目前尚不清楚你正在嘗試做什麼。你可以嘗試更清楚地解釋它嗎? – 2014-09-26 08:03:04

回答

2

重寫:

while read min hr date mon day user cmd; do 
    actv="$min $hr $date $mon $day $user $cmd" # only purpose I can see here 
               # is to fix the spaces  
    if grep -Fq "$actv" tempcron; then 
     echo "data in tempcron exist" 
    else 
     echo "data input into file" 
     echo "$actv >> tempcron" 
    fi 
done < myfilecron 

的主要問題是,$ ACTV字符串包含*字符,這是正則表達式量詞。你沒有告訴grep搜索一個簡單的字符串,你給出了一個不匹配的正則表達式模式。

的另一大問題,你的腳本:while read $line - 你給read一個或多個變量不是一個變量