【发布时间】:2017-08-10 12:18:11
【问题描述】:
我有这个命令会输出 0、1 或 2。
这行代码是配置文件 (zabbix) 的一部分,是单行代码的唯一原因。
mysql -u root -e "show slave status\G" | \
grep -E 'Slave_IO_Running:|Slave_SQL_Running:' | cut -f2 -d':' | \
sed "s/No/0/;s/Yes/1/" | awk '{ SUM += $1} END { print SUM }'
但我希望它输出的值是这样的,这样我就可以设置具有正确状态的警报:
如果只有
Slave_IO_Running是No则输出1。如果只有
Slave_SQL_Running是No则输出2。如果两者都是
Yes,则输出3。如果两者都是
No,则输出0。如果
show slave status命令没有行/输出,则输出 4。
因此,例如使用 sed 或 awk 使用唯一值修改 No 的第一个条目。以及具有唯一值的第二个条目,依此类推。
show slave status\G的输出
mysql> show slave status\G
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 10.10.10.10
Master_User: replicationslave
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mysql-bin.009081
Read_Master_Log_Pos: 856648307
Relay_Log_File: mysqld-relay-bin.002513
Relay_Log_Pos: 1431694
Relay_Master_Log_File: mysql-bin.009081
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
【问题讨论】:
-
您能否仅包含
mysql -u root -e "show slave status\G"命令的输出,以便我们更好地了解您正在处理哪些数据,并测试我们可能提出的解决方案? -
您可以使用
if语句而无需运行两次查询,变量的存在是有原因的。 -
注意,如果你用管道结束一行,你不需要换行反斜杠 -- bash 知道你还没有完成。