Shell script

Hi,

Hi ,

I am writing a shell script to find the failures ..

I am getting below update in to the variable

var=`grep -i "failed" $FILE`

output : total failed :0

total failed :0
total failed :0
total failed : 0

Here I need the logic like - I need a mail if it results other than 0 in any line..

Can anyone please help me on this ..

I am writing a shell script to find the failures ..

I am getting below update in to the variable

var=`grep -i "failed" $FILE`

output :

total failed :0
total failed :0
total failed :0
total failed : 0

Here I need the logic like - I need a mail if it results other than 0 in any line..

Can anyone please help me on this ..

Try sth like this...

[[ $(grep -c "failed" $FILE) -gt 0 ]] && mail here

Look at the small script below. Hope it helps

#!/bin/bash
#Date
#Author
#Purpose : Alert on failed count > 0
#Usage   : ./alertonfail.sh <file>

#File with the failed count
FILE=$1

#Verify if the file paramter was set and if the file exists
if [ $# -lt 1 ]; then
        echo "Usage   : ./alertonfail.sh <file>"
elif [ ! -e $FILE ]; then
        echo "File does not exist"
fi

#Take the count for each line
NRFAILED=`cut -d: -f2 $FILE | tr -d ' '`

#Verify the values for each line
for i in $NRFAILED; do
      if [ $i -gt 0 ]; then
        echo "Failure detected, the value is "$i  | mail -s "FAILURE ALERT" email@adresss.com
        #echo "Mail sent for failure > 0, Actual value is $i"
      fi
done

#END

---------- Post updated at 03:29 AM ---------- Previous update was at 02:36 AM ----------

Or, in a line you can do something like this :

cat failures.txt | awk -F':' '{gsub(/ */,"",$2); print $2}' | xargs -I var bash -c 'if [ var -gt 0 ];then echo "Value is" var | mail -s "FAILURE" email@address.com ;fi' 

If your log file contains much more that just these "total failed" records, and there are multiple of them in the file, then you have choices to make. Does each one have a time stamp to identify it, for instance?

You can easily loop through them with:-

for var in `grep "total failed" $FILE|tr ":" " "|tr -s " "|cut -f3 -d" "`
do
   if [ $var -gt 0 ]
   then
      send your message here using $var
   fi
done

What I'm doing here is to get all the "total failed" record, change the colon into a space, make all the spaces single spaces in case there are extras in there, then get just the value from field 3 into the value var to be used inside the loop as you wish.

I hope that this helps.

Robin
Liverpool/Blackburn
UK

Try

awk -F: '/total failed/ && $2+0!=0 {exit 1}' file || mail ...