我們必須小心循環。
例如,如果你要檢查文件開始的算法你可能已經不得不做這樣的事情:
FILE_TO_CHECK="/var/logs/deployment.log"
LINE_TO_CONTAIN="Server started"
SLEEP_TIME=10
while [ $(cat FILE_TO_CHECK | grep "${LINE_TO_CONTAIN}") ]
do
sleep ${SLEEP_TIME}
done
# Start your algorithm here
但是,爲了防止無限循環,你應該添加一些綁定:
FILE_TO_CHECK="/var/logs/deployment.log"
LINE_TO_CONTAIN="Server started"
SLEEP_TIME=10
COUNT=0
MAX=10
while [ $(cat FILE_TO_CHECK | grep "${LINE_TO_CONTAIN}") -a ${COUNT} -lt ${MAX} ]
do
sleep ${SLEEP_TIME}
COUNT=$(($COUNT + 1))
done
if [ ! $(cat FILE_TO_CHECK | grep "${LINE_TO_CONTAIN}") ]
then
echo "Let's go, the file is containing what we want"
# Start your algorithm here
else
echo "Timed out"
exit 10
fi
'$(SLEEP_TIME)'應該是'$ {SLEEP_TIME}'。沒有必要貓和管道grep。大寫變量是一個壞習慣。 – Biffen 2014-09-21 14:01:50
謝謝你的評論。我已經修復了'$ {SLEEP_TIME}'。關於命名約定,您正確使用小寫似乎是一個更好的主意,以便不覆蓋環境變量。 – 2014-09-21 14:04:51
while循環中的邏輯是否顛倒了?只要grep找到某個東西,它就會循環,而當它沒有時會停止。如果直到'grep -q字符串文件;睡1s; done'? – Biffen 2014-09-21 14:12:43