2016-01-27 23 views
1

我用下面的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 [ $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 

到ADDD条件,但它说:syntax error in conditional expression

+1

'[$(SSH -f $ line“w”| tail -n + 3 | awk'{print $ 1}')=='zwang10']]' – anubhava

+0

@anubhava。谢谢。但是我很难将上面的句子添加到if条件中。 – 81235

回答

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 
+0

其实只有'[[$ RESULT -eq 0]]'时​​,才可以有'ssh -f $ line“w”| tail -n + 3 | awk'{print $ 1}'',我该怎么办?否则,'ssh'失败。 '结果'是'ssh'是否成功的结果。 – 81235

+0

好的检查更新的答案 – anubhava

+0

当输出包含多个相同的名称'zwang10'作为情况2时,您的代码不会'echo $ line'。但我希望它能'echo $ line' – 81235

相关问题