shell script 문자열 검색 질문!

x980707x의 이미지

안녕하세요
스크립트를 하나 만들다 잘 안되어 질문 드립니다.

아래와 같이 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
김정균의 이미지

서식이 있거나 코드의 경우에는 <code> block을 이용하시면 깔끔하네 나옵니다.

그리고.. 원하시는 것은 아래와 같이 grep의 return 값을 이용하시면 원하시는 바가 될 것 같네요. (일단 check_ping이 어떻게 코드가 만들어져 있는지 모르므로 정확하게 동작할지는 모르겠습니다.)

for ((i=1; i<81; i++))
do
 
    check_ping -H 10.10.10.$i | grep 'CRITICAL' >& /dev/null
    res=$?
 
    [ $res = 0 ] && echo "CRITICAL" || echo "OK"
done
x980707x의 이미지

답변 감사합니다 아래 코드와 같이 실행 하여도 원하는 결과가 나오지 않습니다.
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

nomail의 이미지

check_ping에서 결과를 critical, ok 목록들을 넘겨 준다는 말씀인가요?
본문이 잘 이해가 안됩니다만, test식에서 정규식 검색을 사용하면 됩니다.

if [[ $cmd =~ CRITICAL ]]; then

x980707x의 이미지

답변 감사합니다.

이부분도 해보았는데 잘 안나오네요 ㅠㅠ 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

nomail의 이미지

22번부터 80번까지 ping 때려서 최종 결과 중에 critical을 찾는 거라면.. 올려주신 주신 코드는 잘못 된것 같습니다.

for ((i=22; i<=80; i++)); do
    cmd+=$(check_ping -H 11.10.10.$i | grep -io critical)
done
 
shopt -s nocasematch
 
if [[ $cmd =~ critical ]]; then
    echo "CRITICAL"
else
    echo "OK"
fi

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.