Case vs array


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Case vs array
# 1  
Old 02-14-2014
Case vs array

Hi Gurus,

Is there a way to replace case -- esac with an array

Code:
while [ 1 ] ; do
      read key_press ;
      case $key_press in
      p|P)
          fun_P
        ;;
      t|T)
          fun_T
        ;;
      l|L)
         fun_L
        ;;
      *)
        fun_Misc
        ;;
      esac
    done

I want to replace case with an array...

Jagpreet

Last edited by Scott; 02-14-2014 at 02:53 AM.. Reason: Code tags
# 2  
Old 02-14-2014
You can use associative array functionality of bash, not sure which version supports it, mine is 4.2.25
Code:
declare -A choice
choice[p]=fun_P
choice[P]=fun_P

read key_press
eval ${choice[$key_press]}

Assuming fun_P is a valid function defined.

HTH

--ahamed
# 3  
Old 02-14-2014
thanks for reply ahamed.

first of all bash version
Code:
GNU bash, version 3.00.16(1)-release (sparc-sun-solaris2.10)

After assigning all the array fields.

whatever keypress entered it takes last choice.

I changed sequence as well, it takes the last assigned key to array for execution.

Code:
choice[a]=fun_a
choice[b]=fun_b
choice[c]=fun_c

now at any key press it executes fun_c

one more point.. how do I take care of * case

Code:
case
*)
fun_misc

jagpreet

Last edited by Scott; 02-14-2014 at 03:44 AM.. Reason: Code tag, please...
# 4  
Old 02-14-2014
You need to look up the bash man page in your system if it supports. Also check typeset.
Other option is to use the ascii/decimal value of the choice character as the index of a normal array.

Sorry I dont have a solaris box at my disposal.

--ahamed

---------- Post updated at 11:52 PM ---------- Previous update was at 11:40 PM ----------

Something like this...

Code:
choice[$(printf "%d" "'P'")]=fun_P
choice[$(printf "%d" "'p'")]=fun_P

read key_press
eval ${choice[$(printf "%d" "'$key_press'")]}

As for default case, may be you should do a validation?

Smells like some sort of homework!

--ahamed
# 5  
Old 02-14-2014
thanks again ahamed.

I could manage to make it work to some extent.....

Except how do I handle default case in here.
It can be used with *) in case - esac

I mean executing a function in case the input from user is anything else than what is assigned in array

---------- Post updated at 04:17 AM ---------- Previous update was at 04:01 AM ----------

Its done........


thanks ahamed for your help.......
Login or Register to Ask a Question

Previous Thread | Next Thread

9 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Change first letter of a word from lower case to upper case

Hi all, I am trying to find a way to change first letter in a word from lower case to upper case. It should be done for each first word in text or in paragraph, and also for each word after punctuation like . ; : ! ?I found the following command sed -i 's/\s*./\U&\E/g' $@ filenamebut... (7 Replies)
Discussion started by: georgi58
7 Replies

2. Shell Programming and Scripting

Using an array with a case statement in KSH

Hi, I'm really new ro shell scripting (actually any kind of programming) and am pretty sure I'm making a pretty basic error here but I can't for the life of me figure it out. What I'm trying to do is get an array working with a case statement in a KSH script. The code is as follows: ... (3 Replies)
Discussion started by: SReilly
3 Replies

3. Shell Programming and Scripting

Conversion from Upper Case to Lower Case Condition based

Hello Unix Gurus : It would be really appreciative if can find a solution for this . I have records in a file . I need to Capitalize the records based on condition . For Example i tried the following Command COMMAND --> fgrep "2000YUYU" /export/home/oracle/TST/data.dat | tr '' ''... (12 Replies)
Discussion started by: tsbiju
12 Replies

4. Shell Programming and Scripting

[Solved] Change Upper case to Lower case in C shell

Is there a command that can switch a character variable from UPPER case to lower case? like foreach AC ( ABC BCD PLL QIO) set ac `COMMAND($AC)` ... end Thanks a lot! (3 Replies)
Discussion started by: rockytodd
3 Replies

5. Shell Programming and Scripting

sed ignoring case for search but respecting case for subtitute

Hi I want to make string substitution ignoring case for search but respecting case for subtitute. Ex changing all occurences of "original" in a file to "substitute": original becomes substitute Origninal becomes Substitute ORIGINAL becomes SUBSTITUTE I know this a little special but it's not... (1 Reply)
Discussion started by: kmchen
1 Replies

6. Shell Programming and Scripting

data array needs to change upper case to lower case

Hi all, i have a data array as followes. ARRAY=DFSG345GGG ARRAY=234FDFG090 ARRAY=VDFVGBGHH so on.......... i need all english letters to be change to lower case. So i am expecting to see ARRAY=dfsg345ggg ARRAY=234fdfg090 ARRAY=vdfvgbghh so on........ If i have to copy this data in... (8 Replies)
Discussion started by: usustarr
8 Replies

7. Shell Programming and Scripting

how to convert value in a variable from upper case to lower case

Hi, I have a variable $Ctrcd which contains country names in upper case and i want to convert them into lower case. I have tried so many solutions from already existing threads but couldn't get the correct one. Can anybody help me with this..... Thanks a lot.. (2 Replies)
Discussion started by: manmeet
2 Replies

8. Shell Programming and Scripting

Script needed to select and delete lower case and mixed case records

HELLO ALL, URGENTLY NEEDED A SCRIPT TO SELECT AND DELETE LOWER AND MIXED CASE RECORDS FROM A COLUMN IN A TABLE. FOR EXAMPLE : Table name is EMPLOYEE and the column name is CITY and the CITY column records will be: Newyork washington ... (1 Reply)
Discussion started by: abhilash mn
1 Replies

9. UNIX for Dummies Questions & Answers

lower case to upper case string conversion in shell script

How can convert a Lower case variable value to an upper case in the kron shell script. (3 Replies)
Discussion started by: dchalavadi
3 Replies
Login or Register to Ask a Question