2015-06-23 30 views
0

我只是在/etc/profile中找不到字符串SVN_BRANCH而試圖執行一段代碼。我現在的代碼如下所示:只有在文件中沒有找到字符串的情況下才在bash中執行代碼

a = cat /etc/profile 
    b = `$a | grep 'SVN_BRANCH'` 

    not_if "$b" 
{ 
.... 
... 
... 
} 

這個失敗,因爲給出。應該怎麼做?

+3

http://mywiki.wooledge.org/BashGuide –

+0

另請參閱幫助中心中的規則。在提出有關錯誤代碼的問題時,應始終包含具體錯誤或不當行爲(無論您認爲它對讀取代碼的人有多明顯),並僅包含該錯誤或錯誤行爲所需的最低代碼發生。在這種情況下,閱讀BashGuide(從而獲得對該語言的基本理解)是更好的開始。 –

回答

0

你可以使用grep命令的退出代碼,以確定是否要執行的代碼塊這樣

cat /etc/profile | grep SVN_BRANCH 2>&1 >/dev/null || { 
.... 
.... 
} 
+4

Noooo !!! 'cat文件| grep'是UUoC:使用'grep ... file'。而且,這太多了,你可以使用'grep -q'作爲相同的purpuse。 – fedorqui

1

grep可以採取文件作爲參數,你不需要cat該文件,然後用管道將內容傳遞給grep,這完全沒有必要。

這是if else塊與grep一個例子:

if grep -q "pattern" filepath;then 
echo "do something" 
else 
echo "do something else" 
fi 

注:

-q選項是相當的操作。它會隱藏命令的輸出grep(將打印錯誤)。

如果你想讓它不打印任何錯誤太然後使用此:

if grep -sq "pattern" filepath;then 

或者這樣:

if grep "pattern" filepath >/dev/null 2>&1;then 

>/dev/null是將輸出重定向到/dev/null

2>&1 redirects both stderr and stdout

+2

'grep -q pattern path'比'grep pattern path>/dev/null'效率更高,因爲它允許grep一找到匹配就停下來,而不需要繼續執行文件的其餘部分生成輸出被扔掉。 –

+1

我也建議只有在非常明確的需要時才使用'>/dev/null 2>&1' - 拋出錯誤而不是將它們呈現給用戶隱藏意外故障背後的原因。 –

相關問題