need help simplifying an if statement


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting need help simplifying an if statement
# 1  
Old 11-02-2011
need help simplifying an if statement

the code below is a small fragment of the actual line, in fact i have about 20 values i'm comparing and want to know if it can be simplified. other than the x.xx.xx format of the value they have nothing in common

Code:
if [ "$ver" = "4.02.011" ] || [ "$ver" = "4.04.013" ] || [ "$ver" = "4.06.011" || [ "$ver" = "5.02.010" ]; then
do this
else
do this
fi

any suggestions?
# 2  
Old 11-02-2011
Code:
#!/bin/ksh

valid='4.02.011|4.04.013|4.06.011|5.02.010'

eval "case \$ver in $valid) echo 'do this' ;;
                    *) echo 'do that' ;;
      esac"

This User Gave Thanks to vgersh99 For This Post:
# 3  
Old 11-02-2011
Write all of the values into a file, call it test.dat
Code:
grep -q "$ver" test.dat
if [ $? - eq 0 ];  then
   do_this  # true, found in file
else
   do_that  # not in file
fi

# 4  
Old 11-02-2011
Slight modification to that:

Code:
if grep -q "^$ver\$" filename
then
        echo "Matches"
else
        echo "Doesn't match"
fi

This will prevent partial matches from happening, it will match only whole lines.

Unfortunately . is a special character to grep, so it's possible 4.02.011 could still match against 4302911.
# 5  
Old 11-02-2011
grep -F (on modern systems that support it) gets around the need for that.
Not all systems support grep -F. -F == fixed strings, no regular expressions

It is POSIX behavior.

grep
# 6  
Old 11-02-2011
Quote:
Originally Posted by jim mcnamara
grep -F (on modern systems that support it) gets around the need for that.
Not all systems support grep -F. -F == fixed strings, no regular expressions

It is POSIX behavior.

grep
or one can use 'fgrep' to search for 'literal strings'.
# 7  
Old 11-02-2011
appreciate all the feedback as knowing more than one way to handle it is always good. the first post is the most efficient for our means as maintaining a file outside of this script would not get approved. thanx all for chiming in!
Login or Register to Ask a Question

Previous Thread | Next Thread

7 More Discussions You Might Find Interesting

1. UNIX for Beginners Questions & Answers

Simplifying awk/sed short pipeline

I have a file like this: FileName,Well,Sample Description,Size ,Calibrated Conc. ,Assigned Conc. ,Peak Molarity ,Area,% Integrated Area,Peak Comment,Observations 2017-11-15 - 13.49.50.D1000,EL1,Electronic Ladder,25,5.22,,321,0.803,,,Lower Marker 2017-11-15 - 13.49.50.D1000,EL1,Electronic... (6 Replies)
Discussion started by: Xterra
6 Replies

2. Shell Programming and Scripting

Simplifying sed/tr

Hi all, I don't have much experience with shell scripting and I was wondering if there's a shorter way to write this. Basically, given a list of strings separated by new lines, I want to prepend each string with a prefix and separate the strings with commas i.e. stra strb strc becomes... (3 Replies)
Discussion started by: vshan
3 Replies

3. Shell Programming and Scripting

Simplifying IPv6 addresses from user input

hi friends, im new to scripting and am tiring out to valid an ip address if user inputs 9 : 003 : 0 : 0 : 100 : 256 ,i need to suppress all leading zeros and single zero ie out put for the same should be 9 : 3 : : : 100 : 256 can any help using awk ,regular expression to split the string... (1 Reply)
Discussion started by: sandeepjeede
1 Replies

4. UNIX for Advanced & Expert Users

Simplifying my script

Hi, Is there a way to simplify the below script? Because I am having problems executing this if I added this to CRON. Also, you may notice that its objective is to put all information in one file (rm1.txt). And in addition file "sRMR_6.txt" to sRMR_23.txt" changes its information everyday.... (4 Replies)
Discussion started by: vibora
4 Replies

5. Shell Programming and Scripting

simplifying awk

tcpdump -nr testdump|awk '!/:/;gsub(/^+|+$/,""){print $3};a!~$0;{a=$0};{print $3};!/length/;/./;!/11\:/;!/8 7 6 5 4 3 2 1/;!/UDP/{b=$0} END {for (j=i-1; j>=0; ) print b };{for (i=NF; i>0; i--) printf("%s ",i);printf ("\n")}' *NOTE IN j>=0 the ; ) was given a space since a smiley is showing up...... (1 Reply)
Discussion started by: sil
1 Replies

6. Shell Programming and Scripting

Simplifying the For loop

Is there a way to simplify stating 1 through to 10, for example in a for loop construct? for x in 1 2 3 4 5 6 7 8 9 10 do .... done I have tried (1-10) with no luck.. thanks (2 Replies)
Discussion started by: sirtrancealot
2 Replies

7. Shell Programming and Scripting

Help in simplifying a sed command

I need to do a substitution: CPF to ,C,P,F, CPM to ,C,P,M, SPF to ,S,P,F etc. I can do each of them with separate substitutions e.g. s/CPF/,C,P,F/ but I'd like to know if there is a more elegant solution. In general, how can I use the results of the search in the substitution, ... (3 Replies)
Discussion started by: wvdeijk
3 Replies
Login or Register to Ask a Question