use*_*518 5 mysql bash scripting
我正在尝试在bash中对MySQL 5.6.35运行查询,如果值大于或等于14,则让它退出0.我可以让它显示我期望的结果,但不能退出0.
脚本:
#!/bin/bash
query="SELECT count(*) FROM weekly WHERE date > DATE_SUB(NOW(), INTERVAL 1 WEEK)"
mysql -u root -sN weekly_db -e "$query";
if test $query -ge 14 ; then
echo "OK"
exit 0
else
echo "CRITICAL"
exit 2
fi
Run Code Online (Sandbox Code Playgroud)
这是执行的bash脚本:
~# ./check.sh
39
./check.sh: line 6: test: too many arguments
CRITICAL
Run Code Online (Sandbox Code Playgroud)
更新与答案:
以下是我对此问题的感谢,感谢codeforester的帮助
#!/bin/bash
query="SELECT count(*) FROM weekly WHERE date > DATE_SUB(NOW(), INTERVAL 1 WEEK)"
OUTPUT=$(mysql -u root sN weekly_db -e "$query";)
if ((OUTPUT >= 14)) ; then
echo "OK"
exit 0
else
echo "CRITICAL"
exit 2
fi
Run Code Online (Sandbox Code Playgroud)
输出:
~# ./check.sh
OK
Run Code Online (Sandbox Code Playgroud)
您收到too many arguments
错误是因为未加引号$query
评估了许多混淆的单词test
.我相信你的意图不是测试查询,而是查询结果.因此,您需要使用命令替换来捕获MySQL的输出:
query_output=$(mysql -u root -sN weekly_db -e "$query")
Run Code Online (Sandbox Code Playgroud)
然后测试它(( ... ))
更适合数值逻辑:
if ((query_output >= 14)); then
echo "OK"
exit 0
else
echo "CRITICAL"
exit 2
fi
Run Code Online (Sandbox Code Playgroud)
如果MySQL失败(连接或查询问题),查询输出将为空,您的逻辑仍然有效 - if
条件将评估为false,else
部分将被执行.我猜这就是你想要的.
也可以看看:
归档时间: |
|
查看次数: |
490 次 |
最近记录: |