2014-10-10 53 views
0

我有一个脚本,做一个数据库查询(计数),但结果不是一个整数,我试图与让利,但有能力改变这一点,运气好的话KSH返回值不是整数

SQL="SELECT COUNT(*), INTRUDER FROM intruders WHERE UUR BETWEEN '${START}' and '${EINDE}' GROUP BY INTRUDER;" 

实际MySQL命令

RESULT=$(mysql -u ${MYSQLUSER} -p${MYSQLPWD} -h ${SERVER} ${DATABASE} -BsNe "${SQL}") 

计算

for RECORD in ${RESULT} 
    do 
    let TOTAL=$(echo ${RECORD} | awk '{print $1}') 
    if [[ ${TOTAL} -ge ${MAXTRY} ]]; then 
    ## Do something .... 
    echo ${RECORD} | awk '{print $2}' 
    fi 
done 

错误的循环: ./scrip t.sh [42]:let:TOTAL = 3 4:算术语法错误

+0

Wha t是获取该shell脚本值之前的RECORD的内容? – fpmurphy1 2014-10-10 13:04:27

+0

这里有不同的问题,你应该选择另一种方法(在下面)。在填充RESULT变量时,您应该将正确的站点放在双引号中以获取所有行。这不会解决所有问题,for循环将空格和换行符视为字段分隔符。 – 2014-10-10 21:34:21

回答

0

您可以使用awk来提取整数 的

`RESULT=$(mysql -u ${MYSQLUSER} -p${MYSQLPWD} -h ${SERVER} ${DATABASE} -BsNe "${SQL}")` 

可以写成

`RESULT=$(mysql -u ${MYSQLUSER} -p${MYSQLPWD} -h ${SERVER} ${DATABASE} -BsNe "${SQL}"| awk "print $1")` 

看看是否能解决您的问题 我上面的语句写的假设您正在压制查询结果的标题

0

管道输出的sql并循环遍历结果。 我加了grep -v INTRUDER,我不知道你的输出中是否有标题记录。

TOTAL=0 
mysql -u ${MYSQLUSER} -p${MYSQLPWD} -h ${SERVER} ${DATABASE} -BsNe "${SQL}" | 
    grep -v INTRUDER | while read intrudercount intrudername; do 
     echo "Counting [${intrudername}]: ${intrudercount}" 
     if [ ${intrudercount} -gt ${MAXTRY} ]; then 
     echo "${intrudername} was very bad." 
     fi 
     ((TOTAL = TOTAL + ${intrudercount})) 
     echo "Subtotal until now: ${TOTAL}" 
    done