运行SSH远程命令并使用grep查找字符串

6
我想编写一个脚本,可以远程运行一些SSH远程命令。我所需要的只是执行命令的输出中grep一些特殊字符串,这将意味着命令已成功执行。例如当我运行以下命令时:
ssh user@host "sudo /etc/init.d/haproxy stop"

我得到的输出是:
Stopping haproxy: [  OK  ]

我只需要找到“OK”字符串以确保命令成功执行。我该怎么做?
1个回答

6

添加grep并检查退出状态:

ssh user@host "sudo /etc/init.d/haproxy stop | grep -Fq '[  OK  ]'"
if [ "$#" -eq 0 ]; then
    echo "Command ran successfully."
else
    echo "Command failed."
fi

你也可以将 grep 放在外面。
ssh user@host "sudo /etc/init.d/haproxy stop" | grep -Fq '[  OK  ]'

检查退出状态的其他方法:

command && { echo "Command ran successfully."; }
command || { echo "Command failed."; }
if command; then echo "Command ran successfully."; else echo "Command failed."; fi

你还可以捕获输出并将其与case[[ ]]进行比较:
OUTPUT=$(exec ssh user@host "sudo /etc/init.d/haproxy stop")
case "$OUTPUT" in
*'[  OK  ]'*)
    echo "Command ran successfully."
    ;;
*)
    echo "Command failed."
esac

if [[ $OUTPUT == *'[  OK  ]'* ]]; then
    echo "Command ran successfully."
else
    echo "Command failed."
fi

你可以将$(exec ssh user@host "sudo /etc/init.d/haproxy stop")直接嵌入表达式中,而不是将输出传递给变量。

如果/etc/init.d/haproxy stop发送stderr消息,则只需将其重定向到stdout,以便您可以捕获它:

sudo /etc/init.d/haproxy stop 2>&1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接