如何检查输出只包含一个特定的字符串

时间:2016-01-27 07:40:53

标签: linux bash shell

我使用以下shell脚本

if [ $RESULT -eq 0 ] && [ -z $(ssh -f $line "w" | tail -n+3 | awk '{print $1}') ]
then
    echo $line
    echo $line >> hostlist_available
fi

我想做以下事情:

[ $RESULT -eq 0 ]成立的条件下, 如果[ -z $(ssh -f $line "w" | tail -n+3 | awk '{print $1}') ]$(ssh -f $line "w" | tail -n+3 | awk '{print $1}') only contains string "zwang10"成立,我们仍会继续循环。

命令$(ssh -f $line "w" | tail -n+3 | awk '{print $1}') ]将输出如下情况:

只有我的一个名字

zwang10

我的几个名字

zwang10
zwang10

其他人姓名

jack
jack
ben

其他名字和我的

jack
zwang10
zwang10

如何测试输出是否只包含我的名字zwang10

我尝试在if

中添加条件
  if [ $RESULT -eq 0 ] && [ [-z $(ssh -f $line "w" | tail -n+3 | awk '{print $1}')] || [[ $(ssh -f $line "w" | tail -n+3 | awk '{print $1}') == 'zwang10' ]]]
    then
        echo $line
        echo $line >> hostlist_available
fi

但它说syntax error in conditional expression

1 个答案:

答案 0 :(得分:1)

这样做:

if [[ $RESULT -eq 0 ]]; then
   output=$(ssh -f $line "w" | tail -n+3 | awk '{print $1}')

   if [[ -z $output || $output == 'zwang10' ]]; then
      echo $line
      echo $line >> hostlist_available
   fi
fi