我只是在/etc/profile
中找不到字符串SVN_BRANCH
而試圖執行一段代碼。我現在的代碼如下所示:只有在文件中沒有找到字符串的情況下才在bash中執行代碼
a = cat /etc/profile
b = `$a | grep 'SVN_BRANCH'`
not_if "$b"
{
....
...
...
}
這個失敗,因爲給出。應該怎麼做?
我只是在/etc/profile
中找不到字符串SVN_BRANCH
而試圖執行一段代碼。我現在的代碼如下所示:只有在文件中沒有找到字符串的情況下才在bash中執行代碼
a = cat /etc/profile
b = `$a | grep 'SVN_BRANCH'`
not_if "$b"
{
....
...
...
}
這個失敗,因爲給出。應該怎麼做?
你可以使用grep命令的退出代碼,以確定是否要執行的代碼塊這樣
cat /etc/profile | grep SVN_BRANCH 2>&1 >/dev/null || {
....
....
}
Noooo !!! 'cat文件| grep'是UUoC:使用'grep ... file'。而且,這太多了,你可以使用'grep -q'作爲相同的purpuse。 – fedorqui
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
'grep -q pattern path'比'grep pattern path>/dev/null'效率更高,因爲它允許grep一找到匹配就停下來,而不需要繼續執行文件的其餘部分生成輸出被扔掉。 –
我也建議只有在非常明確的需要時才使用'>/dev/null 2>&1' - 拋出錯誤而不是將它們呈現給用戶隱藏意外故障背後的原因。 –
http://mywiki.wooledge.org/BashGuide –
另請參閱幫助中心中的規則。在提出有關錯誤代碼的問題時,應始終包含具體錯誤或不當行爲(無論您認爲它對讀取代碼的人有多明顯),並僅包含該錯誤或錯誤行爲所需的最低代碼發生。在這種情況下,閱讀BashGuide(從而獲得對該語言的基本理解)是更好的開始。 –