Menus in Korn Shell and invalid selections


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Menus in Korn Shell and invalid selections
# 1  
Old 12-02-2008
Menus in Korn Shell and invalid selections

Hey Guys.

I need to code a series of menus that have four options, selectable either by the number in the menu or the name, in succession. This part I have achieved however I am struggling to find a way that should the user try to enter an invalid selection, such as the number 5 or an incorrect name, there is an echo line saying that the entry is incorrect and the menu presented again - this will happen until a correct selection is made.

I have managed to get the echo line working: "echo "Chosen option is unknown, please try again!"\\n" .

As you can see, there are three menus at present.

One asks you to select from a list of friends whose names you previously input.

The next asks you to choose a celebrity from a precoded list.

The next asks you to choose a file from a precoded list.

This is my first time working with the korn shell and I first though of gotos (if incorrect, goto line whatever) but they unfortunatly dont work Smilie

Code:
read VarName?"Please enter your name, then press Enter and Ctrl+D: "

echo "Hello, Welcome $VarName !" \\n

echo "Please enter your friends' names, seperated by spaces: " \\n

read VarFriend1 VarFriend2 VarFriend3

echo "Please choose a friend from the given menu below: "
select VarFriends in $VarFriend1 $VarFriend2 $VarFriend3 Exit

do
    if [[ -z "$VarFriends" ]]
        then
          echo "Chosen option is unknown, please try again!"\\n

    else
          echo "You choose $VarFriends"\\n
    
    fi
          
    if [[ $VarFriends = Exit ]]
        then exit
              
    else  
          echo "Welcome $VarFriends"\\n
    fi
  break
done

echo "Please choose a celebrity from the given menu below: "
select VarCeleb in RickRoss Eminem Obama Exit

do
    if [[ -z "$VarCeleb" ]]
        then
          echo "Chosen option is unknown, please try again!"\\n
         
    else
          echo "You choose $VarCeleb"\\n
    
    fi
          
    if [[ $VarCeleb = Exit ]]
        then exit
              
    else  
          echo "Welcome $VarCeleb"\\n
    fi
 break
done

echo "Please choose a File, A, B, or C which may correspond to the chosen Celebrity below: "
select VarFiles in FileA FileB FileC Exit

do
    if [[ -z "$VarFiles" ]]
        then
          echo "Chosen option is unknown, please try again!"\\n
         
    else
          echo "You choose $VarFiles"\\n
    
    grep $VarCeleb $VarFiles
    
    fi
          
    if [[ $VarFiles = Exit ]]
        then exit
              
    else  
          echo "This is $VarFiles"\\n
          cat $VarFiles
    fi
 
done

Any help would be greatly appreciated! I've been scratching my head all night about it, the answer is probably staring me in the face haha.

Thanks for all your help in advance,

Mudja
# 2  
Old 12-02-2008
take a look at this 'paradigm':
Code:
#!/bin/ksh

PS3='Please select your name: '

names='John Fred Steve Bubba'

  select _name in ${names} quit
  do
    case ${_name} in
       quit) break ;;
       '') print -u2 "You must select one of the above [${names}]" ;;
       *)  _myName="${_name}"; break ;;
    esac
    REPLY=''
  done

  echo "Selected->[${_myName}]"

# 3  
Old 12-02-2008
vgersh,

thanks so much for your quick response! I implemented the code and played around with it but couldnt find a way to use variables in the situation. Instead of John, Fred, Steve and bubba I need $VarFriend1, $VarFriend2, and $Varfriend3 - with these values set by the user with the previous command:

read VarFriend1 VarFriend2 VarFriend3

I seem to have trouble assigning the variable names these other variables...it just prints them as normal text.

So ideally, the code would go:

"Please enter your friends' names, seperated by spaces":

John Fred Steve (entered by user)

Then it would display these names like in the code you provided as values of $VarFriend1 $VarFriend2 and $VarFriend3.


Cheers for your help so far buddy Smilie I've felt I've gotten a lot further so far already!

Last edited by Mudja; 12-02-2008 at 08:40 PM..
# 4  
Old 12-03-2008
Code:
#!/bin/ksh

PS3='Please select your name: '
VarFriend1='John'
VarFriend2='Fred'
VarFriend3='Steve'
VarFriend4='Bubba'

names="${VarFriend1} ${VarFriend2} ${VarFriend3} ${VarFriend4}"

  select _name in ${names} quit
  do
    case ${_name} in
       quit) break ;;
       '') print -u2 "You must select one of the above [${names}]" ;;
       *)  _myName="${_name}"; break ;;
    esac
    REPLY=''
  done

# 5  
Old 12-03-2008
Fantastic!! I'm so glad I came to this site!

I figured out a way to assign the variables, cleaned up my code a bit also and it all works. Just one more question if possible, and my internet research into the select command has so far turned up nothing. Instead of having to pick the number from the menu list, is it possible to use the name of the variable instead?

So instead of:

1) Tom
2) Dick
3) Harry
4) Quit

What would you like to choose: 3

As well as, or instead of, 3, you could write "Harry" and it would work. Obviously, the case function would throw an error if it wasn't 3 or Harry, for example you wrote Harryyy.

One more thing. I have created 3 files, FileA File B and File C. I want to set it so only FileA can be opened if Tom was selected previously, File B if Dick was selected previously, nd FileC if Harry was selected previously, else error. I figured the code might be something like:

Code:
case ${_name} 
    in  quit) break ;;
    in  Tom) cat FileA ;;
    in  Dick) cat FileB ;;
    in  Harry) cat FileC ;;
       '') print -u2 "You must select one of the above [${names}]" ;;
       *)  _myName="${_name}"; break ;;
    esac
    REPLY=''
  done

Cheers for all your help! I have never done programming before, but you have helped learn loads.
# 6  
Old 12-06-2008
After testing the above code i found it did not work. I am still struggling to solve how I could make the one menu's options and case arguments dependent on the user response to a previous one
Login or Register to Ask a Question

Previous Thread | Next Thread

9 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Shell Scripting Problem - Invalid Back Reference

Here is the question... Create a new script, sub2, taking three parameters... 1.) the string to be replaced 2.) the string with which to replace it 3.) the name of the file in which to make the substitution ...that treats the string to be replaced as plain text instead of as a regular... (1 Reply)
Discussion started by: johnhisenburg
1 Replies

2. UNIX for Dummies Questions & Answers

Invalid option errors running shell script

The script below fails with the following error messages: gzip: invalid option -- 'w' Try `gzip --help' for more information. mysqldump: Got errno 32 on write cp: invalid option -- 'w' Try `cp --help' for more information. rm: invalid option -- 'w' Try `rm --help' for more information. ... (1 Reply)
Discussion started by: ANNACTION
1 Replies

3. Solaris

Detect Invalid Data by C shell

Dear all, I'd be so grateful if I could get great feedback again for my problems. We usually spool some text files from our system in csv format. Unfortunately, some data contains ',' (comma) and it's rare case but when it comes to spool, that row included comma should be invalid data, due... (2 Replies)
Discussion started by: elph
2 Replies

4. Shell Programming and Scripting

How to activate Korn Shell functionnalities in Bourne Shell

Hi All I have writing a Korn Shell script to execute it on many of our servers. But some servers don't have Korn Shell installed, they use Borne Shell. Some operations like calculation don't work : cat ${file1} | tail -$((${num1}-${num2})) > ${file2} Is it possible to activate Korn Shell... (3 Replies)
Discussion started by: madmat
3 Replies

5. Shell Programming and Scripting

01.30 Invalid shell error

Hi, I am getting the error 01.30 Invalid shell error I am running the bash shell script in the korn login shell. I have mentioned the #!/bin/bash statement in the my script but not sure why it is giving this error to me.. (4 Replies)
Discussion started by: mr_harish80
4 Replies

6. UNIX for Advanced & Expert Users

Shell menus And Oracle

Dear All, Kindly suggest on how should i proceed with the following requirement I need to develop an interactive shell script menu which would enable the user to inquire the value of a column based on a key value . The output can be more records.. Also is it possible to do the following 1)... (2 Replies)
Discussion started by: ksm
2 Replies

7. Shell Programming and Scripting

menu selections

I am trying to find a way to allow users to select multiple options in a shell menu. I am using case and it gives menu options 1-9, how can I set this up so that it give the user the ability to choose more then one option, ie 1,2 or 3,4,5, etc... (4 Replies)
Discussion started by: lwif
4 Replies

8. Shell Programming and Scripting

Shell Script Menus - Rejecting invalid input (KSH)

Greetings all, I'm currently writing a shell script menu which is dynamically populated from an array. Have a question to ask about the filtering of invalid input. I'm using KSH. A brief description of my algorithm is as follows: 1) Read in input from user and store in a variable. (a valid... (2 Replies)
Discussion started by: rockysfr
2 Replies

9. Shell Programming and Scripting

how to convert from korn shell to normal shell with this code?

well i have this code here..and it works fine in kornshell.. #!/bin/ksh home=c:/..../ input=$1 sed '1,3d' $input > $1.out line="" cat $1.out | while read a do line="$line $a" done echo $line > $1 rm $1.out however...now i want it just in normal sh mode..how to convert this?... (21 Replies)
Discussion started by: forevercalz
21 Replies
Login or Register to Ask a Question