While loop read multiple lines from a grep

Posted by Basil on Server Fault See other posts from Server Fault or by Basil
Published on 2012-10-11T20:24:11Z Indexed on 2012/10/11 21:39 UTC
Read the original article Hit count: 269

Filed under:
|
|
|

I'm writing a script in AIX 5.3 that will loop through the output of a df and check each volume against another config file. If the volume appears in the config file, it will set a flag which is needed later in the script. If my config file only has a single column and I use a for loop, this works perfectly. My problem, however, is that if I use a while read loop to populate more than one variable per line, any variables I set between the while and the done are discarded.

For example, assuming the contents of /netapp/conf/ExcludeFile.conf are a bunch of lines containing two fields each:

volName="myVolume"
utilization=70
thresholdFlag=0

grep volName /netapp/conf/ExcludeFile.conf | while read vol threshold; do
    if [ $utilization -ge $threshold ] ; then
        thresholdFlag=1
    fi
done

echo "$thresholdFlag"

In this example, thresholdFlag will always be 0, even if the volume appears in the file and its utilization is greater than the threshold. I could have added an echo "setting thresholdFlag to 1" in there, see the echo, and it'll still echo a 0 at the end.

Is there a clean way to do this? I think my while loop is being done in a subshell, and changes I make to variables in there are actually being made to local variables that are discarded after the done.

© Server Fault or respective owner

Related posts about unix

Related posts about scripting