Shell case statement


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Shell case statement
# 1  
Old 07-27-2010
Shell case statement

Code:
echo -e "Select: \c"
read IN
pattern="1-20"
case $IN in
 [$pattern])
              echo "Selected: $IN"
              ;;
 *)
              echo "Invalid selection: $IN"
              ;;
esac

Code:
# sh test
Select: 10
Invalid selection: 10

# sh test
Select: 2
Selected: 2

When I select 1 - 9 it work ok, but with a two digit number it fails.

$pattern it not static as in the above sample its filled in a for loop, i just put it this way for simplicity.

What am I missing here?

EDIT:
actually I have found that on 0,1 and 2 pass. 0 should not pass.

if pattern="1-9" then 1 through 9 passes.

Last edited by Ikon; 07-27-2010 at 05:05 PM..
# 2  
Old 07-27-2010
I think related case ability Smilie
you can try this Smilie

Code:
# case $IN in
 [1-9])
              echo "Selected: $IN"
              ;;
 1[0-9])
              echo "Selected: $IN"
              ;;
 20)
              echo "Selected: $IN"
              ;;

 *)
              echo "Invalid selection: $IN"
              ;;
esac

# 3  
Old 07-27-2010
The way its working is in a for loop I'm incrementing a counter for each guest in Xen and numbering each one, when I select the number I am having the script perform an action to that server number. So I would need them all in one case command.

I guess its like you said its a case related ability/bug. I dont see why 1-9 would work and 1-10 wouldn't though. Smilie
# 4  
Old 07-27-2010
Quote:
Originally Posted by Ikon
I guess its like you said its a case related ability/bug. I dont see why 1-9 would work and 1-10 wouldn't though. Smilie
Some more knowledge about RE [] might make you see why range 1-9 would work but 1-10 doesn't work as you expected.

If you want to match a double digit number you can not do it as you has been trying.
[1-9] matches any single number between 1 and 9, said digits included
[1-9][0-9] matches any two digits number as long as the first digit is between 1 and 9 and the second digit 0 through 9

Now [1-20] matches any single digit 1 through 2 or 0
# 5  
Old 07-27-2010
(Off topic: Advisible to not give a shell script the same name as a unix command. In this case "test").
# 6  
Old 07-28-2010
Code:
setopt -s extglob   # bash Only
case $IN in 
?(0)[1-9]|[1-9][1-9]|20) echo "Selected: $IN"          ;; 
                      *) echo "Invalid selection: $IN" ;; 
esac


Jean-Pierre.
# 7  
Old 07-28-2010
Quote:
Originally Posted by methyl
(Off topic: Advisible to not give a shell script the same name as a unix command. In this case "test").
I didn't actually use test, when I pasted the text in I changed the name of the script. But I agree. :P
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Shell script run in a case statement call to run a php file, also Perl

Linux System having all Perl, Python, PHP (and Ruby) installed From a Shell script, can call a Perl, Python, PHP (or Ruby ?) file eg eg a Shell script run in a case statement call to run a php file, also Perl or/and Python file??? Like #!/usr/bin/bash .... .... case $INPUT_STRING... (1 Reply)
Discussion started by: hoyanet
1 Replies

2. Shell Programming and Scripting

Shell scripting with case statement

Foe example we have three environments int,qa and prod.Each environment has some number of servers. int=Server1,Server2,Server3 qa=Server4,Server5,Server6 prod=Server7,Server8,Server9 echo "Enter the Environment i.e int,qa,prod" read env case $env in int) ## Need command where all the... (9 Replies)
Discussion started by: nareshreddy443
9 Replies

3. Shell Programming and Scripting

Using shell to generate case statement

Hi Gurus, I have a very weird requirement and have no clue to resolve the issue. please help me get out this difficulty below two tables, table1 contains the column name. D means this column used for the rule. for example: rule 0 is all columns have value, rule1 is col3 and col7 have no value.... (2 Replies)
Discussion started by: Torhong
2 Replies

4. Shell Programming and Scripting

Case statement in UNIX shell script

have written the below code to check whether the string received from user is a file name or dir using case statement, but its going into default case*). #!/bin/sh #Get a string from user and check whether its a existing filename or not rm str2 rm str3 echo "enter a file \c" read fil... (8 Replies)
Discussion started by: Mohan0509
8 Replies

5. Shell Programming and Scripting

Pass values to case statement in a function korn shell

I'm in the process of writng a function that consists of a case statement is there a way of calling the function and passing a value to it? ie function1 () { case opt1 do ..... opt2 do..... esac } function opt1 I'm aware the syntax is not correct, but you get the general idea. (1 Reply)
Discussion started by: squrcles
1 Replies

6. Shell Programming and Scripting

shell script case statement

In a case statement like below : case $rental in "car") echo "For $rental Rs.20 per k/m";; "van") echo "For $rental Rs.10 per k/m";; "jeep") echo "For $rental Rs.5 per k/m";; "bicycle") echo "For $rental 20 paisa per k/m";; *) echo "Sorry, I can not gat a $rental for you";;... (4 Replies)
Discussion started by: sriram003
4 Replies

7. UNIX for Dummies Questions & Answers

If or Case Statement

I want to write a program with the following variables: a=7000 b=24000 c=613.8 The user can enter two words: Vivid or Blue for example. The challenge is that the user might not want to write the words the way they appear. The user can write V or v or vivid or Vivid or write Blue or blue, or B,... (1 Reply)
Discussion started by: Ernst
1 Replies

8. Shell Programming and Scripting

what is problem with this small shell script.. case statement related

Hi All, this small script is written to recognize user input character.. it is in small case .. upeer case or is a number... but when i input first capital letter say A.. it always gives small character.... what is the problem. #!/bin/bash echo "Enter the character" read a case $a in )... (2 Replies)
Discussion started by: johnray31
2 Replies

9. Shell Programming and Scripting

Shell script automation using case statement

Hi, I'm trying to write a shell script that has a menu and then dependant on the selection, will automate some samba file transfer. The problem is when I run the code without the case statement it runs fine. but when I put the case statement in the only way I can get the code to run is to... (6 Replies)
Discussion started by: ianf
6 Replies

10. Shell Programming and Scripting

case statement

Hi all, is it possible to create a 'dynamic' case statement. ie select option in `ls` do case satement depending on results of the above `ls` done I hope I have explained this ok! Thanks Helen (1 Reply)
Discussion started by: Bab00shka
1 Replies
Login or Register to Ask a Question