2014-10-10 2 views
0

I가 데이터베이스에 대한 쿼리 (수를) 수행하지만 결과는 내가 운이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] :하자 : TOTAL = 3 산술 구문 오류

+0

뭐 그 쉘 스크립트 값을 얻기 전에 t는 RECORD의 내용입니까? – fpmurphy1

+0

여기에서 다른 문제, 다른 접근 방법을 선택해야합니다 (아래). RESULT var을 채울 때 모든 라인을 얻으려면 오른쪽 사이트를 큰 따옴표로 묶어야합니다. 이것은 모든 것을 고쳐 줄 수는 없지만, for 루프는 공백과 개행을 필드 분리 자로 간주합니다. –

답변

0

당신은 당신이 내가 가정 문 위에 쓴 문제를 해결하면

`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")` 

과 같이 쓸 수있다 정수를 추출 볼 AWK로 사용할 수 있습니다 쿼리의 결과의 헤더를 표시하지 않습니다.

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