Visit Our UNIX and Linux User Community


Cycle for with for-then-else


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Cycle for with for-then-else
# 1  
Old 08-16-2013
Cycle for with for-then-else

Hi,

i would like to insert a if-then-else function in to cycle for

--------------
cat test
--------------
Code:
[root@EmcSanServer ~]# cat test
ALFA
BETA
GAMMA

-----------------------

This is my script:
Code:
#!/bin/bash

for i in $(cat test); if [ $i = 'ALFA' ]; then
        echo "ok"
else
        echo "not ok"
fi
done

That's is wrong?

Last edited by Scrutinizer; 08-16-2013 at 11:54 AM.. Reason: extra code tags
# 2  
Old 08-16-2013
there is a do statement missing.

--
The preferred construct for this kind of application would be:
Code:
while read i
do 
  if [ $i = 'ALFA' ]; then
    echo "ok"
  else
    echo "not ok"
  fi
done < test

# 3  
Old 08-16-2013
Sorry, but can i insert in to this cycle a command like this?

Code:
#!/bin/bash

SID=xx
symcfg list -sid $SID -pool -gb -det -thin |grep pool |awk '{print $1}' >list_vmax_xx_pools

while read i
do
if [ `symcfg show -sid $SID -pool $i -detail -thin -gb |grep "Max. Subscription Percent"` = 'Enable' ]; then
    echo "ok"
  else
    echo "not ok"
  fi
done < list_vmax_xx_pools

cat list_vmax_xx_pools

pool_1
pool_2
pool_3
# 4  
Old 08-17-2013
symcfg show -sid $SID -pool $i -detail -thin -gb |grep "Max. Subscription Percent"
will return some line which include string Max. Subscription Percent and also Enable in same line ?
Have you tested the command and what is the output in this lines where is Max. Subscription Percent ?

If syntax is
Code:
if commandline
then
       # commandline exit code is 0 = ok
       echo ok
else # commandline exit code <> 0
       echo not ok
fi

[ is one of the commands. So it's also [[.
But also symcfg, cp, grep, awk, .. are commands.

Ex. testing how cp works
Code:
if cp file file2  >/dev/null 2>&1
then
      echo "cp done"
else
      echo "cp not so ok"
fi

So something: grep output to the /dev/null - not so interesting to see.
Code:
if symcfg show ... | grep  ...  >/dev/null 2>&1
then
    ...
fi

But you can also test output of grep.
Code:
data=$(symcfg show -sid $SID -pool $i -detail -thin -gb | grep "Max. Subscription Percent" )

# grep some value and if some line include also Enable then okay.
case "$data" in
        *Enable* ) echo "ok" ;;
        *) echo "not ok" ;;
esac

But if line include "Max. Subscription Percent" and "Enable" in this order, then why not using grep something like
Code:
grep "Max. Subscription Percent.*Enable"
# 
data=$(symcfg show -sid $SID -pool $i -detail -thin -gb | grep "Max. Subscription Percent.*Enable" 2>/dev/null)
[ "$data" = "" ] && echo "not ok"
[ "$data" != "" ] && echo "ok"

# 5  
Old 08-17-2013
Quote:
Originally Posted by elilmal
Sorry, but can i insert in to this cycle a command like this?

Code:
#!/bin/bash

SID=xx
symcfg list -sid $SID -pool -gb -det -thin |grep pool |awk '{print $1}' >list_vmax_xx_pools

while read i
do
if [ `symcfg show -sid $SID -pool $i -detail -thin -gb |grep "Max. Subscription Percent"` = 'Enable' ]; then
    echo "ok"
  else
    echo "not ok"
  fi
done < list_vmax_xx_pools

cat list_vmax_xx_pools

pool_1
pool_2
pool_3
You of course can, there's no syntax error, but the way you present it won't yield a reasonable result. symcfg may output whatever it wants, if you grep for "Max Subscription Percent" the output will never be an "Enable" alone.
Why don't you grep for "pool.*Max Subscription Percent" or even "pool.*Max Subscription Percent.*Enable" (as proposed by kshji) in the first place and then work on the results file? Or, maybe, that's already what you desired?
BTW, kshji's last data evaluation could be condensed to
Code:
[ -z "$data" ] && echo "not ok" || echo "OK"

# 6  
Old 08-19-2013
For me this is the best:

Code:
data=$(symcfg list -v |grep "Symmetrix Data Encryption"|head -n 1|awk '{print $5}' )

# grep some value and if some line include also Enable then okay.
case "$data" in
        *Enable* ) echo "ok" ;;
        *) echo "This is not ok" > /tmp/mailmessage2
        mutt -s "SCRIPT TEST" my.address@domain < /tmp/mailmessage2 ;;
esac

Thanks, for this help Smilie

Previous Thread | Next Thread
Test Your Knowledge in Computers #1001
Difficulty: Medium
Grace Brewster Murray Hopper was an American computer scientist and United States Navy rear admiral who found a moth in a computer stuck in a relay in 1947 and was later referred to as "Grandma COBOL" for her pioneering work in machine-independent programming languages.
True or False?

7 More Discussions You Might Find Interesting

1. UNIX for Beginners Questions & Answers

For cycle, process order

Hello, I am running a script under ubuntu 16.04 I have no problem with the script. My question is general algorithm of for file command. I just need to know how for file in *.txt process works. Let's say, I wish to run the script by sorting filename: for file in *.txt do "do something in... (2 Replies)
Discussion started by: baris35
2 Replies

2. Shell Programming and Scripting

sed problem in a for cycle

Hi, i have a problem with a sed command runned in a for cycle... I have a file named fileX which contains (i have crippled the line to minimal for easy): load data dbfoo - TOCHANGE - comment load data dbboo - TOCHANGE - comment load data dbzoo - TOCHANGE - comment ... And a file... (8 Replies)
Discussion started by: maxlamax
8 Replies

3. Shell Programming and Scripting

for cycle question

i have a question how to modify below script to generate the expect result below : test.sh #!/bin/bash for ((i=0; i < 25; i++)) do echo $1$i done current result: test.sh 20090101 200901010 200901011 200901012 200901013 200901014 200901015 200901016 200901017 200901018 (2 Replies)
Discussion started by: bleach8578
2 Replies

4. Shell Programming and Scripting

for cycle

Hello, I have a question: is there a way to have a "for" cycle done a certain number of times. For example in c++ I can do this: for (i=o;i<10;i++) and the cycle will be repeated 10 times. in UNIX for example I do this: for i in `cat /etc/host` do done and the cycle will be repeated... (6 Replies)
Discussion started by: jcpetela
6 Replies

5. Shell Programming and Scripting

wildcard in a if cycle

hello everybody, I need help on putting a wildcard match inside an if condition (I'm using korn shell): if ] then echo ' ' echo ''$MYSEL' is not a correct option' echo ' ' else ..... i tried also #if -ne "``" and a lot of combinations of `"' but I didn't find the... (2 Replies)
Discussion started by: elionba82
2 Replies

6. Shell Programming and Scripting

For cycle

Hello, I have files in a dir. I what to create a FOR cycle that will do this FOR <condition> do file=`ls <directory> | tail -1` echo $file mv -f $file <another dir> done What I want to now is what should I put in the <condition>. The condition I want is that the FOR will execute... (3 Replies)
Discussion started by: nagomes
3 Replies

7. Shell Programming and Scripting

shell cycle

Hello I got a cycle in the script which open another scripts. if then action fi Scripts action will be running 2 times at the same time. Inside of action() is insert into the table. But what I want is that only first script can do insert into table. So how to do... (2 Replies)
Discussion started by: mape
2 Replies

Featured Tech Videos