2015-02-06 40 views
0

我正在創建一個shell腳本來讀取消息日誌,並找到正確的字符串執行操作時。到目前爲止,我有以下幾點:閱讀unix日誌消息,然後執行操作

#!/bin/bash 
string="ntp engine ready" 
tail -n 0 -f /var/log/messages | \ 
while read LINE 
do 
echo "$LINE | grep -q $string" 
if [ $? == 0];then 
shttpclient "http://127.0.0.1/do/action" 
fi 
done 

不過,我得到以下錯誤:

grep: engine: No such file or directory 
grep: ready: No such file or directory 

即使當我看到記錄器已輸出ntp engine ready

回答

1

首先,你需要修復您的報價:

echo "$LINE" | grep -q "$string" 

其次,你可以簡單地做:

if echo "$LINE" | grep -q "$string"; then 

而不是手動檢查返回代碼$?。請記住,[也是一個命令,if只是檢查其返回碼。

如果確實需要使用[,記住]是一個命令的變量,因此有必要用空格將其包圍:

if [ $? = 0 ] 

我還刪除了第二=,因爲它是一個bash擴展來支持它。其實你正在做的整數比較,所以實際上它應該是下列之一:

if [ $? -eq 0 ] # POSIX compliant 
if (($? == 0)) # bash arithmetic context 
+0

感謝就像我說的有點甚至這種形式的新手,謝謝所有幫助 – 2015-02-06 14:57:07

+0

@Erik沒有問題,感謝您接受我的答案。如果您還沒有這樣做,我會建議您參加[巡演],這不需要很長時間,並且包含有關此類事物的信息。 – 2015-02-06 14:58:47

0

改變路線如下:

echo "$LINE" | grep -q "$string" 

引號設定不正確。就像您執行該操作時那樣:grep -q ntp engine ready; ntp是要搜索的字符串,而engineready是文件。它必須如下所示:grep -q "ntp engine ready"