Xymon Mailing List Archive search

if statment issue on ext script

list Steve Coile
Thu, 25 Sep 2014 10:08:46 -0400
Message-Id: <CAHr=BSRN72UHte8f9_n6VGCE11=EKEa9W=user-0ffd27b4b68a@xymon.invalid>

Rodney, your script is broken on many levels.

   - The code you provided is incomplete: the *while* loop has a *do*, but
   no *done*, and the outer-most *if* has a *then* but no *fi*.


   - It isn't clear what *do_fetch* does, nor what the *$REGEX* used to
   *grep* its output matches.


   - The use of *`echo "$IP"`* is excessive: *"$IP"* is sufficient.  For
   instance:

if [[ *`echo "$IP"`* =~ ^10.xxx.xxx.1[0-9] ]]; then


should be:

if [[ *"$IP"* =~ ^10.xxx.xxx.1[0-9] ]]; then


   - Your regular expressions in the *[[ ]]* expressions should be
   single-quoted, and the periods in the IP addresses should be escaped to
   they are matched literally, and not used as special characters.  For
   instance:

if [[ `echo "$IP"` =~ *^10.xxx.xxx.1[0-9]* ]]; then


should be:

if [[ "$IP" =~ *'^10\.xxx\.xxx\.1[0-9]$'* ]]; then


   - Your use of *echo* in your variable definitions is excessive; the
   literal string is sufficient.  For instance:

HOST=*`echo "server33.test.corp.local"`*


should be:

HOST=*'server33.test.corp.local'*


   - Your *if* statements attempting to identify $IP assume $IP will match
   one of the regular expressions.  What if it doesn't?  You should include
   some error handling, such as:

*else*

*echo "$IP: unrecognized address" >&2*

*exit 1*


   - It's not clear where *$X* comes from or what it represents.


   - The if statement testing *$X *is overly complex.

if [ *$(echo "$X < 10" | bc) -ne 0* ]; then


should be:

if [ *$X -lt 10* ]; then


   - The definition of *$MSG* contains unnecessary and potentially
   problematic quotes.

MSG="

BIG BROTHER MESSAGE


DATACENTER : D1

SERVER : *"*$HOST*"*

STATE : Normal

STATUS : Green

TEST : TestProd EchoTest

RESPONSE SUCCEEDED : *"*$X*"* sec

IP : *"*$IP*"*

EVENT TIME : `date +"%c"`


"

should be:

MSG="

BIG BROTHER MESSAGE


DATACENTER : D1

SERVER : $HOST

STATE : Normal

STATUS : Green

TEST : TestProd EchoTest

RESPONSE SUCCEEDED : $X sec

IP : $IP

EVENT TIME : `date +"%c"`


"


-- 

*Steve Coile*Senior Network and Systems Engineer, McClatchy Interactive
<http://www.mcclatchyinteractive.com/>;
Office: XXX-XXX-XXXX | Mobile: XXX-XXX-XXXX | Fax: XXX-XXX-XXXX

On Thu, Sep 25, 2014 at 9:32 AM, James Louis <user-518fefde45bd@xymon.invalid> wrote:
Just for test purposes can you add a line like "TESTWORD=`echo
myTestWord`" in each if statement and then add a line to the msg like
"TESTWORD : $TESTWORD" and then run it again.

Thanks,
Jim

On Thu, Sep 25, 2014 at 8:20 AM, Simioni, Rodney <user-3ffedc1f4d0c@xymon.invalid>
wrote:
 Sorry about that.

The issue is that $HOST is not printed in the output next to SERVER.


$BBHOME/bin/bbhostgrep $TESTNAME | while read IP HOSTNAME OTHER; do

  if do_fetch $HOSTNAME $IP | grep "$REGEX" > /dev/null ; then


if [[ `echo "$IP"` =~ ^10.xxx.xxx.1[0-9] ]]; then

HOST=`echo "server33.test.corp.local"`


elif [[ `echo "$IP"` =~ ^10.xxx.xxx.2[0-9] ]]; then

HOST=`echo "server34.test.corp.local"`


elif [[ `echo "$IP"` =~ ^10.xxx.xxx.3[0-9] ]]; then

HOST=`echo "server35.test.corp.local"`


elif [[ `echo "$IP"` =~ ^10.xxx.xxx.4[0-9] ]]; then

HOST=`echo "server36.test.corp.local"`


elif [[ `echo "$IP"` =~ ^10.xxx.xxx.5[0-9] ]]; then

HOST=`echo "server37.test.corp.local"`


elif [[ `echo "$IP"` =~ ^10.xxx.xxx.6[0-9] ]]; then

HOST=`echo "server38.test.corp.local"`


elif [[ `echo "$IP"` =~ ^10.xxx.xxx.7[0-9] ]]; then

HOST=`echo "server39.test.corp.local"`

fi


if [ $(echo "$X < 10" | bc) -ne 0 ]; then

            COL=green

            MSG="

            BIG BROTHER MESSAGE


            DATACENTER : D1

            SERVER : "$HOST"

            STATE : Normal

            STATUS : Green

            TEST : TestProd EchoTest

            RESPONSE SUCCEEDED : "$X" sec

            IP : "$IP"

            EVENT TIME : `date +"%c"`


            "


           $BB $BBDISP "status $HOSTNAME.$TESTNAME $COL

           $MSG"

#########################

Here is the output – notice that server is empty:


XYMON MESSAGE
            DATACENTER : D1
            SERVER :
            STATE : Normal
            STATUS : Green
            TEST : test
            RESPONSE SUCCEEDED : .079411876 sec
            IPADDRESS : 10.xxx.xxx.xxx
            EVENT TIME : Wed 24 Sep 2014 05:48:21 PM EDT


*From:* Xymon [mailto:xymon-bounces at xymon.com] *On Behalf Of *James Louis
*Sent:* Thursday, September 25, 2014 9:06 AM
*To:* usa ims
*Cc:* xymon at xymon.com
*Subject:* Re: [Xymon] if statment issue on ext script


On Wed, Sep 24, 2014 at 4:55 PM, usa ims via Xymon <xymon at xymon.com>
wrote:

XYMON MESSAGE
            DATACENTER : D1
            SERVER :
            STATE : Normal
            STATUS : Green
            TEST : test
            RESPONSE SUCCEEDED : .079411876 sec
            IPADDRESS : 10.xxx.xxx.xxx
            EVENT TIME : Wed 24 Sep 2014 05:48:21 PM EDT


Why is there more to your MSG than what is in your script?

Jim


--


*     Jim Louis        \\\\||////        \ ~ ~  /        | @ @ |*

*--oOo---(_)---oOo--*

"If a free society cannot help the many who are poor, it cannot save the
few who are rich." ~ John Kennedy
--


*     Jim Louis       \\\\||////       \ ~ ~  /       | @ @ |*


*--oOo---(_)---oOo--*

"If a free society cannot help the many who are poor, it cannot save the
few who are rich." ~ John Kennedy