Bash MySQL查询

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)

cod*_*ter 5

您收到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部分将被执行.我猜这就是你想要的.


也可以看看: