2014-10-10 47 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