加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

bash – 运行ssh remote命令和grep查找字符串

发布时间:2020-12-15 21:43:51 所属栏目:安全 来源:网络整理
导读:我想编写远程运行一些ssh远程命令的脚本.我需要的是为一些特殊的字符串grep输出执行的命令,这意味着命令执行成功.例如,当我运行这个: ssh user@host "sudo /etc/init.d/haproxy stop" 我得到输出: Stopping haproxy: [ OK ] 我只需要找到“OK”字符串以确
我想编写远程运行一些ssh远程命令的脚本.我需要的是为一些特殊的字符串grep输出执行的命令,这意味着命令执行成功.例如,当我运行这个:

ssh user@host "sudo /etc/init.d/haproxy stop"

我得到输出:

Stopping haproxy: [  OK  ]

我只需要找到“OK”字符串以确保命令执行成功.我怎样才能做到这一点?

解决方法

添加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

您还可以捕获输出并将其与大小写或[[]]进行比较:

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停止向stderr发送消息,只需将其重定向到stdout即可捕获它:

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读