IF loop syntax error


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting IF loop syntax error
# 1  
Old 03-25-2012
IF loop syntax error

I am trying to run a menu option though IF loops. I keep getting errors not allowed the menu to be processed correctly. Currently it will accept the first 2 statements but then crash on the 3rd. The 2nd and 3rd have the same syntax, so I do not understand why it breaks.

Code:
#!/bin/bash

while true; do

    read -p "Enter project number (1/2/3/10/20/30):"
    $menu
    
    if [ $menu -eq 1 ]; then
    {    
    echo "1"
    }
    elif [ $menu -eq 2 ]; then
    {
    echo "2"
    {
    elif [ $menu -eq 3 ]; then
    {
    echo "3"
    {
    elif [ "$menu" == "10" ]; then
    {
    echo "10"
    {
    elif [ "$menu" == "20" ]; then
    {
    echo "20"
    {
    elif [ "$menu" == "30" ]; then
    {
    echo "30"
    {    
    fi

read -p "Would you like to process another project? [y/n]" yn
case $yn in
    [Yy]* ) ;;
    [Nn]* ) exit;;
        * ) echo "Please select proper entry:";;
    esac
done

# 2  
Old 03-25-2012
The first read does not populate $menu because it should not have the dollar character (the second read looks ok).
Also there are rather a lot of left braces { and no right braces.

However, this sort of script is best achieved with a case statement similar to your second read and then would be much easier to read:

Code:
#!/bin/bash

while true; do

    read -p "Enter project number (1/2/3/10/20/30):" menu
    case "${menu}" in
          1) echo "${menu}"
               ;;
          2) echo "${menu}"
               ;;
          3) echo "${menu}"
               ;;
          10) echo "${menu}"
               ;;
          20) echo "${menu}"
               ;;
          30) echo "${menu}"
               ;;
          *)  echo "Invalid option: ${menu}"
               ;;
    esac

    read -p "Would you like to process another project? [y/n]" yn
    case $yn in
        [Yy]* ) ;;
        [Nn]* ) exit;;
        *) echo "Please select proper entry:";;
    esac
done


Last edited by methyl; 03-25-2012 at 06:21 PM.. Reason: layout ; remove comment about then - it was not true
# 3  
Old 03-25-2012
Thank you, I feel kinda dumb not noticing all the brackets were wrong Smilie
# 4  
Old 03-25-2012
I'ce removed my comment about then because I had a moments word blindness. Some people us a different layout.
# 5  
Old 03-25-2012
Actually, there was no need for braces at all, this is shell after all.
Code:
    if   [ "$menu" -eq  1 ]; then
      echo "1"
    elif [ "$menu" -eq  2 ]; then
      echo "2"
    elif [ "$menu" -eq  3 ]; then
      echo "3"
    elif [ "$menu" -eq 10 ]; then
      echo "10"
    elif [ "$menu" -eq 20 ]; then
      echo "20"
    elif [ "$menu" -eq 30 ]; then
      echo "30"
    else
      echo "Invalid option: $menu"
    fi

But I agree a case statement is better suited...
Code:
case $menu in  
  1|2|3|10|20|30) echo "$menu" ;; 
  *) echo "Invalid option: $menu" ;; 
esac


Last edited by Scrutinizer; 03-25-2012 at 07:15 PM..
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

What does xx mean in this while loop syntax?

I have a shell script which has this while loop line "while read tblName xx; do..." I understand how while loop works but don't know what does this xx stands for? (1 Reply)
Discussion started by: later_troy
1 Replies

2. UNIX for Dummies Questions & Answers

Syntax error in for loop

I am using simple for loop, but getting syntax error when I run the code code #!/bin/ksh pls enter number read n for(i=1; i<=n; i++) do echo $i done syntax error + pls enter number + read n (5 Replies)
Discussion started by: stew
5 Replies

3. UNIX for Dummies Questions & Answers

[Solved] Syntax error for awk in a loop

can some one please tell me what is the problem with my syntax:confused: I have 100 files in one folder 1. want to read each of the line by line 2. calculate their number of the words between the first word and the last word of each line 3. create file for each file with number of words... (8 Replies)
Discussion started by: A-V
8 Replies

4. Shell Programming and Scripting

Syntax error: Bad for loop variable

I'm getting an error while running this script. Need help. set -x verbose #echo on clear #clear the screen USERNAME="bbb" PASSWORD="password" SERVER="192.168.1.100" WAIT_TIME=300 FILE_PATH="/home/users/xxx/MMM" # local directory to pickup *.dat file REMOTE_PATH="/Drop_off/xxx/yyy" #... (17 Replies)
Discussion started by: clgz2002
17 Replies

5. UNIX for Dummies Questions & Answers

for-loop syntax

%%%%% (3 Replies)
Discussion started by: lucasvs
3 Replies

6. Shell Programming and Scripting

Bash (Ubuntu server): Syntax error: "|" unexpected in While-loop

Hello forum, I hope my problem is easy to solve for someone in here! My main task is to copy a large amount of imap-accounts from one server to another. There is a tool (Perl) called imapsync which does the job exellent. Unfortunately I'm only able to run it on one account at a time. After... (3 Replies)
Discussion started by: primaxx
3 Replies

7. Shell Programming and Scripting

for loop syntax

hi, I have to use for loop in my script. The below code is providing an output, 1,2,3,4,5..n. But i need to display the values one by one eg: it has to display the first value then exit from the loop and display the second value then exit till n(last value). for i in 1,2,3,4,5..n do ... (2 Replies)
Discussion started by: sreelu
2 Replies

8. Shell Programming and Scripting

Syntax error: Bad for loop variable

Hi Can any one help, I'm trying to run a script that beeps out the ip address from the PC internal speaker with the following script. It keeps throwing the error "Syntax error: Bad for loop variable" on line 16. I know its picking up the IP ADDRESS correctly. Any ideas on whats wrong. I'm... (3 Replies)
Discussion started by: dman
3 Replies

9. Shell Programming and Scripting

for loop not working - syntax error at line 6: `end of file' unexpected

I have a file called test.dat which contains a b I have written a shell script called test.sh for i in `cat test.dat` do echo $i done When i run this script using sh test.sh I get this message - test.sh: syntax error at line 6: `end of file' unexpected What is the... (3 Replies)
Discussion started by: debojyoty
3 Replies

10. Shell Programming and Scripting

syntax error in while loop

Hi, I have the following script (compile_mercury) and I get this error: I have no idea why...and I have written this script completely in linux (bash) and not in windows. **************** ./compile_mercury: line 136: syntax error near unexpected token `done' ./compile_mercury: line 136:... (1 Reply)
Discussion started by: habzone2007
1 Replies
Login or Register to Ask a Question