我有一个名为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
中的数据总是重复的。当然,我需要grep
来自mycronfile
并使用正确的模式以避免重复。但是如何用正则表达式grep
呢?因为当行包含星号(*)时会出现问题。
答案 0 :(得分: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
提供了一个或多个变量名称而非变量值