CASE statement


 
Thread Tools Search this Thread
Top Forums UNIX for Dummies Questions & Answers CASE statement
# 1  
Old 12-15-2008
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 that YEAR is valid is by using a case statement:

Code:
case $YEAR in 
    1997 | 1998 | 1999 | 2000 )
    echo  '- YEAR is valid'
    ;;
    *) 
    echo; echo; echo 'ERROR: YEAR is not valid (Must be 1997,1998,1999, or 2000)'
    exit 1
    ;;
esac

However, that is a simple case! In reality YEAR is valid for 1997-2008. Instead of listing each valid year in the case statement is there a way that I could just place all the valid years into an array and use that? ie:

Code:
YEAR_ARRAY=(1997 1998 1999 2000)

case $YEAR in 
    ${YEAR_ARRAY[@]} )
    echo  '- YEAR is valid'
    ;;
    *) 
    echo; echo; echo 'ERROR: YEAR is not valid (Must be 1997,1998,1999, or 2000)'
    exit 1
    ;;
esac

I have tried that and it doesn't work. Am I close? Is there a better way? Thanks a lot.

Mike
# 2  
Old 12-15-2008
Hi.

Here are some related methods, some use seq, all use eval:
Code:
#!/bin/bash -

# @(#) s2       Demonstrate feature.

echo
echo "(Versions displayed with local utility \"version\")"
version >/dev/null 2>&1 && version "=o" $(_eat $0 $1) seq
set -o nounset

echo
echo " Results:"
years="1997|1998|1999|2000|2001"

echo " With a variable:"
for i in 1990 1997 200x 2001
do
  echo " Looking for $i"
  eval "
  case $i in
    $years) echo found $i ;;
    *) echo unknown: $i ;;
  esac
  "
done

echo
echo " With command substitution:"
for i in 1990 1997 200x 2001
do
  echo " Looking for $i"
  eval "
  case $i in
    $(seq -s"|" 1997 2003)) echo found $i ;;
    *) echo unknown: $i ;;
  esac
  "
done

echo
years="$(seq -s"|" 1997 2003)|2007|2008"
echo " With combination:"
for i in 1990 1997 200x 2001 2007
do
  echo " Looking for $i"
  eval "
  case $i in
    $years) echo found $i ;;
    *) echo unknown: $i ;;
  esac
  "
done

exit 0

Producing:
Code:
% ./s2

(Versions displayed with local utility "version")
Linux 2.6.11-x1
GNU bash 2.05b.0
seq (coreutils) 5.2.1

 Results:
 With a variable:
 Looking for 1990
unknown: 1990
 Looking for 1997
found 1997
 Looking for 200x
unknown: 200x
 Looking for 2001
found 2001

 With command substitution:
 Looking for 1990
unknown: 1990
 Looking for 1997
found 1997
 Looking for 200x
unknown: 200x
 Looking for 2001
found 2001

 With combination:
 Looking for 1990
unknown: 1990
 Looking for 1997
found 1997
 Looking for 200x
unknown: 200x
 Looking for 2001
found 2001
 Looking for 2007
found 2007

Best wishes ... cheers, drl
# 3  
Old 12-15-2008
Hammer & Screwdriver What about creating a file with valid years and then grep?

Perhaps something like this might be useful?

create a file of valid years
Code:
> cat file115
1999
2000
2001
2002
2003
2004
2005
2006
2007
2008

input a valid year, and see results of grep
Code:
> echo "2005" | egrep -f file115
2005

input an invalid year, and nothing is returned
Code:
> echo "2009" | egrep -f file115

# 4  
Old 12-15-2008
How about something like this using an if statement?

Code:
#! /bin/bash
YEAR_INPUT=$1
YEAR_START=1997            # Begin year
YEAR_CURR=$(date +%Y)   # End year (current year)

if [ $YEAR_INPUT -ge $YEAR_START -a $YEAR_INPUT -le $YEAR_CURR ]
  then
    echo "valid year"
  else
    echo "invalid year"
fi

 
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. UNIX for Dummies Questions & Answers

Case statement help

Hi I am new to shell scripting, I wanted to make a shell script that has a case statement asking the user to select their city 1)london 2)tokyo 3) etc., I then want the users input to be stored in a variable and echoed out in another script; so for example if the user selects tokyo, tokyo city code... (2 Replies)
Discussion started by: scriptnewbie
2 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

Hello, The standard case statement :- case "$1" in "IE0263") commands;; "IE0264") commands;; esac is it possible to have :- case "$1" in "IE0263" OR "IE0878") commands;; "IE0264") commands;; esac Thanks (4 Replies)
Discussion started by: jmahal
4 Replies

4. 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

5. 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

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