在bash中从mysql获取计数值的最简单方法

时间:2010-10-07 22:52:52

标签: mysql bash

也许我应该使用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用来给我发电子邮件(否则我希望脚本保持沉默,所以没有通过电子邮件发送,除非有问题)

6 个答案:

答案 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:)