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 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |