2013-07-02 96 views
2

我是bash的新手,需要一些簡單的腳本。它運行jar,並且必須找到「響應代碼:XXX」。我需要這個響應代碼(只是XXX)。我已經嘗試這個辦法:grep和cut bash腳本:找不到命令

URL=$1 
echo $URL 
callResult=`java -jar RESTCaller.jar $URL` 
status=$? 
if [ $status -eq 0 ]; then 
    result=`$callResult >> grep 'RESPONSE CODE' | cut -d':' -f 2` 
else 
    echo error 
fi 

我得到./run.sh: line 7: RESPONSE: command not found

我在做什麼錯?

回答

1

在這一行:

result=`$callResult >> grep 'RESPONSE CODE' | cut -d':' -f 2` 

你應該通過管道輸出到grep,而不是重定向。將其更改爲:

result=`$callResult | grep 'RESPONSE CODE' | cut -d':' -f 2` 

此外,語法有點偏離,並且您最好避免在可能的情況下使用反引號。這是更好的:

result="$(echo ${callResult} | grep 'RESPONSE CODE' | cut -d':' -f 2)" 
+1

第3行(callResult的定義)中的反引號也應該是直引號。除非他的意思是迴應和管道grep。 – theglauber

+0

@theglauber好點。我儘量避免反引號,並堅持使用通常的'「$(...)」樣式,因爲它會產生更整潔的代碼。 – DevNull

+0

謝謝,它幫助。但正如我發現,它給了我一些XTR輸出,不只是200,但 200 <!doctype html> rii

0
URL=$1 
echo $URL 
callResult=`java -jar RESTCaller.jar $URL` 
status=$? 
if [ $status -eq 0 ]; then 
    result=$($callResult 2>&1 grep 'RESPONSE CODE' | cut -d':' -f 2) 
else 
    echo error 
fi 

你用管道結果到無效的文件名 >>意味着寫入文件中添加上..

2> & 1表示標準錯誤重定向到標準輸入 - 這是它的所有輸出 -