我想運行一些shell命令,如果字符串不存在於文本文件中。如果我粘貼這行到命令行,如果給我一個錯誤。Shell命令 - 基於命令輸出的條件?
if [ $(cat textfile.txt | grep "search string") -eq "" ]; then; echo "some string"; fi;
錯誤:
-bash: [: -eq: unary operator expected
我想運行一些shell命令,如果字符串不存在於文本文件中。如果我粘貼這行到命令行,如果給我一個錯誤。Shell命令 - 基於命令輸出的條件?
if [ $(cat textfile.txt | grep "search string") -eq "" ]; then; echo "some string"; fi;
錯誤:
-bash: [: -eq: unary operator expected
如果使用[]
進行比較,你需要使用=
而不是-eq
。你還需要一些報價。
if [ "$(cat textfile.txt | grep 'search string')" = "" ]; then; echo "some string"; fi;
注意grep
可以採取一個文件名作爲參數所以cat
是不必要的。您也可以直接使用grep
的返回值:如果未找到搜索字符串,則grep返回1。
if [ "$(grep 'search string' textfile.txt)" ]; then
echo "some string";
fi
更緊湊的方式是使用邏輯和&&
。
grep "search string" textfile.txt && echo "some string"
的grep
命令將返回0,如果請求的線被發現(1如果沒有,2如果有錯誤),所以你可以只使用:
grep "search string" textfile.txt >/dev/null 2>&1
if [[ $? -ne 0 ]] ; then
echo 'Not found'
fi
如果你真的想使用字符串(你可能不應該),你應該引用它們,這樣你就不會得到太多的參數[
命令:
if [ "$(cat textfile.txt | grep 'search string')" == "" ] ; then
echo "It's not there!"
fi
grep -F -q -e 'search string' textfile.txt || echo 'Not found'
注:
-F
防止搜索字符串爲正則表達式的解釋。-q
在找到第一個實例後立即取消所有輸出並立即返回,如果字符串出現在大文件的開始位置,則搜索速度會更快。-e
顯式指定模式,允許以短劃線開頭的模式。優雅。某處沿線有人試圖將bash變成perl'[[$(''不幸。 – msw 2010-06-29 07:46:17
這種情況下不需要方括號。由於[
實際上是一個命令,因此您可以在任何可以使用它的地方使用任何命令。所以在這裏,我們可以使用grep
。沒有必要使用cat
,因爲grep
將接受文件名作爲參數。另外,你有兩個分號太多。
if grep -q "search string" textfile.txt; then echo "some string"; fi
或
if grep "search string" textfile.txt > /dev/null 2>&1; then echo "some string"; fi
您不必更改引號,這是完全有效的bash:'「$(cat textfile.txt | grep」搜索字符串「)」' – Tyilo 2012-03-28 18:14:43