Shell 测试涉及管道的命令是否成功

Shell 测试涉及管道的命令是否成功,shell,scripting,pipe,solaris,Shell,Scripting,Pipe,Solaris,测试df和awk命令在以下命令中是否成功的最佳方法是什么?使用Solaris df-h/myloc*|awk'{if($5>80)print$6}>somelog一种简单的方法是将它们拆分,以便存储第一个输出并检查两个退出状态的连接: if OUT1=$(df -h /myloc*) && echo ${OUT1} | awk '{ if ( $5 > 80 ) print $6}' > somelog; then echo "success" else e

测试df和awk命令在以下命令中是否成功的最佳方法是什么?使用Solaris


df-h/myloc*|awk'{if($5>80)print$6}>somelog

一种简单的方法是将它们拆分,以便存储第一个输出并检查两个退出状态的连接:

if OUT1=$(df -h /myloc*) && echo ${OUT1} | awk '{ if ( $5 > 80 ) print $6}' > somelog; then
  echo "success"
else 
  echo "failure"
fi

一种简单的方法是拆分它们,以便存储第一个输出并检查两个退出状态的组合:

if OUT1=$(df -h /myloc*) && echo ${OUT1} | awk '{ if ( $5 > 80 ) print $6}' > somelog; then
  echo "success"
else 
  echo "failure"
fi

您应该使用
pipefail
选项(Solaris上的默认shell
ksh
也支持该选项):

您可以将该选项本地化为子shell:

if (set -o pipefail; false | true); then echo ok; else echo failed; fi

(用相应的命令替换
false
true

您应该使用
pipefail
选项(Solaris上的默认shell
ksh
也支持该选项):

您可以将该选项本地化为子shell:

if (set -o pipefail; false | true); then echo ok; else echo failed; fi

(用各自的命令替换
false
true

我认为if语句需要方括号,但您的示例没有方括号,而且确实有效。这是一个启示!我认为if语句需要方括号,但您的示例没有方括号,而且确实可以工作。这是一个启示!