Shell命令 - 基于命令输出的条件?

dan*_*dan 2 shell conditional-statements

我正在尝试运行一些shell命令,如果文本文件中不存在字符串.如果我将此行粘贴到命令行中,如果给我一个错误.

if [ $(cat textfile.txt | grep "search string") -eq "" ]; then; echo "some string"; fi;
Run Code Online (Sandbox Code Playgroud)

错误:

-bash: [: -eq: unary operator expected
Run Code Online (Sandbox Code Playgroud)

Ben*_*ier 6

如果您[]用于比较,则需要使用=而不是-eq.你还需要一些报价.

if [ "$(cat textfile.txt | grep 'search string')" = "" ]; then; echo "some string"; fi;
Run Code Online (Sandbox Code Playgroud)

请注意,grep可以将文件名作为参数,因此cat不需要.您也可以直接使用返回值grep:如果找不到搜索字符串,则grep返回1.

if [ "$(grep 'search string' textfile.txt)" ]; then
  echo "some string";
fi
Run Code Online (Sandbox Code Playgroud)

更紧凑的方式是使用逻辑和&&.

grep "search string" textfile.txt && echo "some string"
Run Code Online (Sandbox Code Playgroud)