using variables in case statement


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting using variables in case statement
# 1  
Old 10-28-2009
using variables in case statement

is it possible to call a variable in a case statement, for example
Code:
lsmonth=Jan|Feb
l |while read ans
do
   mymonth=`echo $ans |awk '{print $6}'`
   case $mymonth in
    $lsmonth) echo do something
    ;;
    *) echo do something else
    ;;
  esac
done

I want to use $lsmonth after the case $mymonth in
# 2  
Old 10-28-2009
Code:
lsmonth='Jan|Feb'
while read ans
do
	cmd=$(
		echo "
		case $ans in
		$lsmonth) echo do something
		;;
		*) echo do something else
		;;
		esac
		" )
eval $cmd
done

Please use code tags.
# 3  
Old 10-28-2009
Quote:
Originally Posted by jim mcnamara
Code:
lsmonth='Jan|Feb'
while read ans
do
	cmd=$(
		echo "
		case $ans in
		$lsmonth) echo do something
		;;
		*) echo do something else
		;;
		esac
		" )
eval $cmd
done


That will not work in most shells. The variable will be considered a single string, not as two choices.

And there's no need for command substitution:

Code:
case $ans in
     a|b) cmd='echo "do something"' ;;
     *) cmd='echo "do something else"' ;;
esac
eval "$cmd"

# 4  
Old 10-28-2009
Quote:
Originally Posted by cfajohnson

That will not work in most shells. The variable will be considered a single string, not as two choices.

And there's no need for command substitution:

Code:
case $ans in
     a|b) cmd='echo "do something"' ;;
     *) cmd='echo "do something else"' ;;
esac
eval "$cmd"

but doesn't that defeat the purpose of using a variable as valid 'choice'?
Is there a way to do it the way the OPed wanted originally?
I remember seeing something very similar done somewhere...
# 5  
Old 10-28-2009
Quote:
Originally Posted by vgersh99
but doesn't that defeat the purpose of using a variable as valid 'choice'?

There is no purpose in using syntax that is not supported.
Quote:
Is there a way to do it the way the OPed wanted originally?
I remember seeing something very similar done somewhere...

Code:
eval "case \$ans in $lsmonth) .... esac"

# 6  
Old 10-28-2009
Quote:
Originally Posted by cfajohnson
Code:
eval "case \$ans in $lsmonth) .... esac"

thanks - appreciated.
# 7  
Old 10-28-2009
Code:
lsmonth1=Jan; lsmonth2=Feb
l |while read ans
do
   mymonth=`echo $ans |awk '{print $6}'`
   case $mymonth in
    $lsmonth1|$lsmonth2) echo do something
    ;;
    *) echo do something else
    ;;
  esac
done

Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Homework & Coursework Questions

Case Statement

Use and complete the template provided. The entire template must be completed. If you don't, your post may be deleted! 1. The problem statement, all variables and given/known data: Hey, guys I really need some help with a project. "Write a shell program that examines the command line... (8 Replies)
Discussion started by: sk192010`
8 Replies

2. Shell Programming and Scripting

Case Statement

Hey, guys I really need some help with a project. "Write a shell program that examines the command line arguments, counts and collects the number of options. Basically it has to collect and count the arguments that start with a "-" and the one's that don't start with a - I know I have to use... (2 Replies)
Discussion started by: sk192010`
2 Replies

3. Shell Programming and Scripting

case statement

Hi, I am writing case statement to execute some finction, my requirement is once one of the case statement is executed again it has to prompt for the option. for script in `echo "$Script_Selected"` do case $script in 1) getNoOFActUsers ;; 2) moveServerrOORotation ;; ... (2 Replies)
Discussion started by: Satyak
2 Replies

4. Shell Programming and Scripting

help with case statement

I am writing a script to pull diskspace information from our servers. Here is the script that I wrote: #!/bin/ksh for host in `cat /oper/hosts/esc.misc` do ssh -q -o ConnectTimeout=10 operator@$host df -h|grep "/dev/" |egrep '8%|9%|100%' | awk '{print H " " "at " $5 " with " $4 "... (1 Reply)
Discussion started by: rkruck
1 Replies

5. UNIX for Dummies Questions & Answers

CASE statement

Hi, I am writing a bash shell script. My script has a few user defined parameters. When the script runs the first thing it does is make sure that these parameters are valid. One of the parameters is called YEAR. A valid input for YEAR can be 1997-2000. One way I have come up with to ensure... (3 Replies)
Discussion started by: msb65
3 Replies

6. Shell Programming and Scripting

case statement

Hi all, I think i'm asking a sqtupid question here.. i'm using case sttament, what is the syntax or symbol for "or"? I thought was || here a quick sample of my case statment echo "Would you like to update your detail ?" read response case $response in ... (2 Replies)
Discussion started by: c00kie88
2 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

case statement

hi all i'm writing a script and in it i need to prompt the user if the entered value is correct or not ,i wrote the following and its not working ,its executing the script even if i enter Y/N pls any help is appreciated echo "\nAre you sure you entered the right Destination Environment? y :... (5 Replies)
Discussion started by: bkan77
5 Replies

9. Shell Programming and Scripting

Case Statement

Can anyone please tell me why this wont work! Thanks so much! #!/bin/sh for file do case $file in *.*.*) echo Cannot have more than 1 dot exit ;; *'**'*) echo Cannot have more than 1 asterisk exit ;; *'*'*|?.) echo this is a target (19 Replies)
Discussion started by: Zeta_Acosta
19 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