Pattern Matching in IF-ELSE statement


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Pattern Matching in IF-ELSE statement
# 1  
Old 10-17-2013
Pattern Matching in IF-ELSE statement

Hi all,

I am trying to use an if statement to see whether a variable falls under any of the 5 patterns:

Code:
if [[ "$DIV" = @(ter|bom|hre|nte|mol) ]]
then
 echo "something"
else
 echo "Please enter a correct division"
fi

The problem is despite having the variable DIV as "ter", "bom", "hre", "nte", or "mol" it will always have the output:

Please enter the correct division

Any ideas as to why this happens?

Thanks!
# 2  
Old 10-17-2013
What shell are you using?
# 3  
Old 10-17-2013
try something like:
Code:
case ${word:-""}
in
   ter|bom|hre|nte|mol)
      echo "something"
   ;;
   *|"")
      echo "Please enter a correct division"
   ;;
esac

# 4  
Old 10-17-2013
Works for me using ksh93:
Code:
$ cat script
#!/bin/ksh

DIV="mol"

if [[ "$DIV" = @(ter|bom|hre|nte|mol) ]]
then
 echo "something"
else
 echo "Please enter a correct division"
fi

Code:
$ ./script
something

# 5  
Old 10-17-2013
Yoda,

I am using ksh as you are. The value for the variable DIV is passed in as an argument.
# 6  
Old 10-17-2013
It should work then:
Code:
$ cat script
#!/bin/ksh

DIV=$1

if [[ "$DIV" = @(ter|bom|hre|nte|mol) ]]
then
 echo "something"
else
 echo "Please enter a correct division"
fi

Output:
Code:
$ ./script ter
something
$ ./script hre
something
$ ./script mol
something
$ ./script yoda
Please enter a correct division

ksh version:
Code:
$ ksh --version
  version         sh (AT&T Research) 93t+ 2010-02-02

This User Gave Thanks to Yoda For This Post:
# 7  
Old 10-17-2013
Yoda,

Thanks, I realized my mistake:

Code:
if [[ $# < 1 ]]
then
 echo "No parameters received"
else
  while getopts :d opt

Should be:

Code:
if [[ $# < 1 ]]
then
 echo "No parameters received"
else
  while getopts :d: opt

This User Gave Thanks to MIA651 For This Post:
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. UNIX for Dummies Questions & Answers

Grep -v lines starting with pattern 1 and not matching pattern 2

Hi all! Thanks for taking the time to view this! I want to grep out all lines of a file that starts with pattern 1 but also does not match with the second pattern. Example: Drink a soda Eat a banana Eat multiple bananas Drink an apple juice Eat an apple Eat multiple apples I... (8 Replies)
Discussion started by: demmel
8 Replies

2. Shell Programming and Scripting

PHP - Regex for matching string containing pattern but without pattern itself

The sample file: dept1: user1,user2,user3 dept2: user4,user5,user6 dept3: user7,user8,user9 I want to match by '/^dept2.*/' but don't want to have substring 'dept2:' in output. How to compose such regex? (8 Replies)
Discussion started by: urello
8 Replies

3. Shell Programming and Scripting

Sed: printing lines AFTER pattern matching EXCLUDING the line containing the pattern

'Hi I'm using the following code to extract the lines(and redirect them to a txt file) after the pattern match. But the output is inclusive of the line with pattern match. Which option is to be used to exclude the line containing the pattern? sed -n '/Conn.*User/,$p' > consumers.txt (11 Replies)
Discussion started by: essem
11 Replies

4. UNIX for Dummies Questions & Answers

Find pattern suffix matching pattern

Hi, I am trying to get a result out of this but fails please help. Have two files /tmp/1 & /tmp/hosts. /tmp/1 IP=123.456.789.01 WAS_HOSTNAME=abcdefgh.was.tb.dsdc /tmp/hosts 123.456.789.01 I want this result in /tmp/hosts if hostname is already there dont want duplicate entry. ... (5 Replies)
Discussion started by: rajeshwebspere
5 Replies

5. Shell Programming and Scripting

If statement not matching correctly

Hi, When I run the below if statement it keeps returning a yes even though it should be returning a no.. I'm not sure why this is happening.. Can anyone shed some light.? if ] then echo "no" else echo "yes" fi This is being run via ksh on Solaris... (1 Reply)
Discussion started by: Jazmania
1 Replies

6. Shell Programming and Scripting

awk if statement matching all lines starting w/ a number

Does awk have a syntax for a range of numbers or is this the best way? if ($1 >= 0 && $1 <= 9 ) (7 Replies)
Discussion started by: Arsenalman
7 Replies

7. Shell Programming and Scripting

sed - matching pattern one but not pattern two

All, I have the following file: -------------------------------------- # # /etc/pam.d/common-password - password-related modules common to all services # # This file is included from other service-specific PAM config files, # and should contain a list of modules that define the services... (2 Replies)
Discussion started by: RobertBerrie
2 Replies

8. Shell Programming and Scripting

pattern matching in case statement

I have a file abc.sh which looks like qacc1 ----> down v5c0 check interface v5c1 I want to read this file line by line and perform a certain action if a particular pattern is found in that line. My code so far looks like this: FileName='abc.sh' while read LINE do echo $LINE case... (2 Replies)
Discussion started by: lassimanji
2 Replies

9. Shell Programming and Scripting

counting the lines matching a pattern, in between two pattern, and generate a tab

Hi all, I'm looking for some help. I have a file (very long) that is organized like below: >Cluster 0 0 283nt, >01_FRYJ6ZM12HMXZS... at +/99% 1 279nt, >01_FRYJ6ZM12HN12A... at +/99% 2 281nt, >01_FRYJ6ZM12HM4TS... at +/99% 3 283nt, >01_FRYJ6ZM12HM946... at +/99% 4 279nt,... (4 Replies)
Discussion started by: d.chauliac
4 Replies

10. Shell Programming and Scripting

comment/delete a particular pattern starting from second line of the matching pattern

Hi, I have file 1.txt with following entries as shown: 0152364|134444|10.20.30.40|015236433 0233654|122555|10.20.30.50|023365433 ** ** ** In file 2.txt I have the following entries as shown: 0152364|134444|10.20.30.40|015236433 0233654|122555|10.20.30.50|023365433... (4 Replies)
Discussion started by: imas
4 Replies
Login or Register to Ask a Question