也许我应该使用python或perl,但我不知道。
我有4个陈述,我想检查是否有错误超过一小时。我的用户设置好所以我不需要输入mysql用户/通行证。该语句位于mysql_webapp_error_check.sh
中#!/bin/bash
mysql testdb -e "select count(*) from tbl where last_error_date < DATE_SUB(NOW(), INTERVAL 1 HOUR);"
如何让它给我返回值(count(*))而不是打印到屏幕?
然后我会写一个if语句并输出到stdout / err,以便cron用来给我发电子邮件(否则我希望脚本保持沉默,所以没有通过电子邮件发送,除非有问题)
答案 0 :(得分:7)
搜索相同的,-s完全适合我的静音作品。
#!/bin/bash
result=`mysql testdb -s -e "select count(*) from tbl where last_error_date < DATE_SUB(NOW(), INTERVAL 1 HOUR);"`
echo result = .$result.
PS。:我的mysql Ver 14.14 Distrib 5.1.49中还有一个--batch参数,其中“写入没有转换的字段。与--batch一起使用”所以这里有点偏离主题,但这里应该提到。
答案 1 :(得分:3)
在bash中,您使用$()
语法。
#!/bin/bash
ret=$(mysql testdb -e "select count(*) from tbl where last_error_date < DATE_SUB(NOW(), INTERVAL 1 HOUR);")
if [[ "$ret" > 0 ]];then
echo "there is count"
else
echo "no count"
fi
答案 2 :(得分:2)
我通常这样做:
var=`mysql -e "SELECT COUNT(*) FROM ...\G" | awk '/COUNT/{print $2}/'`
答案 3 :(得分:1)
#!/bin/bash
echo show databases\; | mysql -u root | (while read x; do
echo "$x"
y="$x"
done
echo "$y"
)
答案 4 :(得分:0)
就我而言,我只是使用 Record
从MySQL的返回中排除行打印grep -v
。
所以我得到这样的计数器:
count(*)
我以这种方式将其用于某些Wordpress东西,从db_name="NAME_DB";
db_user="USER_DB";
db_pwd="PWD_DB";
counter=`mysql -u${db_user} -p${db_pwd} ${db_name} -e "SELECT count(*) FROM my_table WHERE something = '1';" | grep -v "count"`;
echo "Count for request: $counter";
文件中读取数据库信息:
wp-config.php
答案 5 :(得分:0)
local count=$(mysql -u root --disable-column-names --batch --execute "SELECT COUNT(*) FROM mysql.user WHERE user = '$DstDbName'")
if [[ "$count" > 0 ]]
then
fi
-批处理-清除无边框的输出 --disable-column-names-仅打印具有值的行
不用疯狂的AWK:)