shell script 문자열 검색 질문!
글쓴이: x980707x / 작성시간: 화, 2014/09/16 - 7:06오후
안녕하세요
스크립트를 하나 만들다 잘 안되어 질문 드립니다.
아래와 같이 for문으로 ping체크를 하나씩 합니다.
ping체크시 ping이 나가지 않으면 CRITICAL 이란 문자 ping이 나가게 되면 OK란 문자가 떨어지게 됩니다.
------------------------------- ex) 변수 ping을 출력시 결과물 OK CRITICAL CRITICAL OK OK CRITICAL --------------------------------
여기서 결과를 변수에 저장하여 CRITICAL이란 문자가 나오게 되면 CRITICAL을 출력 아니면 OK를 출력 하고 싶은데 첫 문자가 OK가 나오게 되면 CRITICAL 문자를 검색을 못하네요 처음부터 끝까지 문자를 검색하여 그중 하나라도 CRITICAL이 나오면 CRITICAL를 출력 하려면 어떻게 해야 할까요?ㅠㅠ
for ((i=1; i<81; i++)) do ping=`check_ping -H 10.10.10.$i | awk '{print $2}'` if [[ $cmd = CRITICAL ]] then echo "CRITICAL" exit else echo "OK" exit fi done
Forums:
서식이 있거나 코드의 경우에는 <code>
서식이 있거나 코드의 경우에는 <code> block을 이용하시면 깔끔하네 나옵니다.
그리고.. 원하시는 것은 아래와 같이 grep의 return 값을 이용하시면 원하시는 바가 될 것 같네요. (일단 check_ping이 어떻게 코드가 만들어져 있는지 모르므로 정확하게 동작할지는 모르겠습니다.)
답변 감사합니다 아래 코드와 같이 실행 하여도 원하는
답변 감사합니다 아래 코드와 같이 실행 하여도 원하는 결과가 나오지 않습니다.
10.10.10.x ip중 하나라도 핑이 나가지 않으면 CRITICAL이라는 단어 하나만 출력 하고 싶습니다.
for ((i=22; i<81; i++))
do
ping -c 1 -w 1 10.10.10.$i &> /dev/null
res=$?
[ $res = 0 ] && echo "CRITICAL" || echo "OK"
done
check_ping에서 결과를 critical, ok
check_ping에서 결과를 critical, ok 목록들을 넘겨 준다는 말씀인가요?
본문이 잘 이해가 안됩니다만, test식에서 정규식 검색을 사용하면 됩니다.
답변 감사합니다. 이부분도 해보았는데 잘 안나오네요
답변 감사합니다.
이부분도 해보았는데 잘 안나오네요 ㅠㅠ check_ping은 그냥 ping 명령어라고 보셔도 됩니다 아래와 같습니다.
제가 원하는 결과물은 여러 IP에 for문으로 ping을 날릴시 하나라도 핑이 안나가게 되면 CRITICAL이라는 단어 하나를 얻는것입니다.
for ((i=22; i<81; i++))
do
cmd=`ping -c 1 -w 1 11.10.10.$i | grep 'CRITICAL' &> /dev/null`
echo $cmd
if [[ $cmd =~ CRITICAL ]]; then
echo "CRITICAL"
else
echo "OK"
fi
done
22번부터 80번까지 ping 때려서 최종 결과 중에
22번부터 80번까지 ping 때려서 최종 결과 중에 critical을 찾는 거라면.. 올려주신 주신 코드는 잘못 된것 같습니다.
댓글 달기