2017-05-16 10 views
4

나는 bash에서 MySQL 5.6.35에 대한 쿼리를 실행하려고하고있다. 값이 14보다 크거나 같으면 0을 종료해야한다. 예상했던 결과를 얻을 수있다. 하지만 종료하지 0Bash MySQL 쿼리

스크립트 :

: 대답

~# ./check.sh 
39 
./check.sh: line 6: test: too many arguments 
CRITICAL 

UPDATE : 여기

#!/bin/bash query="SELECT count(*) FROM weekly WHERE date > DATE_SUB(NOW(), INTERVAL 1 WEEK)" mysql -u root -sN weekly_db -e "$query"; if test $query -ge 14 ; then echo "OK" exit 0 else echo "CRITICAL" exit 2 fi 

실행 bash는 스크립트가 여기 16,

내가 codeforester의 도움이 감사에 대한 가서 어떻게

#!/bin/bash 

query="SELECT count(*) FROM weekly WHERE date > DATE_SUB(NOW(), INTERVAL 1 WEEK)" 
OUTPUT=$(mysql -u root sN weekly_db -e "$query";) 

if ((OUTPUT >= 14)) ; then 
    echo "OK" 
    exit 0 
else 
    echo "CRITICAL" 
    exit 2 
fi 

출력 : 인용 부호가 $querytest 혼란 많은 단어로 평가되므로

~# ./check.sh 
OK 
+1

왜 것'$ query' 마술'-ge 14'을? 이것은 SQL 문자열입니다. – tadman

+0

내가 뭘보고 있는지, 어쩌면 내가 4 행에 다른 변수를 설정해야합니다. – user2355518

+0

참고로 'bash'는 실제로 MySQL에서 데이터를 가져올 수있는 최악의 방법입니다. 파이썬, 루비, 펄, Node.js, 네이티브 MySQL 드라이버를 사용할 수 있다면 당신은 훨씬 나아질 것입니다. 간단한 래퍼 스크립트를 작성하고 결과를 종료 상태 코드에 매핑하면 'bash'가이를 해석 할 수 있으므로 매우 쉽습니다. – tadman

답변

5

당신은 too many arguments 오류가 있습니다. 귀하의 의도는 쿼리를 테스트하는 것이 아니라 쿼리 결과입니다. 경우

if ((query_output >= 14)); then 
    echo "OK" 
    exit 0 
else 
    echo "CRITICAL" 
    exit 2 
fi 

은 MySQL이 실패 (연결 또는 조회 : 숫자 논리에 더 적합 ((...))로 테스트 한 후

query_output=$(mysql -u root -sN weekly_db -e "$query") 

과 : 그래서, 당신은 MySQL을의 출력을 캡처 할 수 command substitution를 사용할 필요가 문제가 발생하면 쿼리 출력이 비어 있고 논리는 계속 작동합니다. if 조건은 false로 평가되고 else 부분이 실행됩니다. 나는 그것이 당신이 원하는 것이라고 생각합니다.


은 참조 :

+0

먼저 감사합니다! 당신은 정확합니다. 단지 쿼리의 결과를 테스트하고 싶습니다. 나는 이것을 시험해 보았지만 명령을 실행할 때 수 많은 mysql 구성 출력을 얻었고 중요한 결과를 보였다. : ~ # ./check.sh을 ./check.sh : 라인 6 : ((:. MySQL의 버전이 14.14 DISTRIB 5.6 .... 중요한 – user2355518

+1

좋아, 당신은 정답를 알려준 내가 업데이 트됩니다 원래 질문. 다시 한 번 감사드립니다. – user2355518