Syntax error near unexpected token 'else'

  1. The problem statement, all variables and given/known data:

line 37: syntax error near unexpected token 'else'
line 37: ' else'

the script is made to take 1 or 2 command line arguments however i get the above stated error when trying to process it. This happens with or without arguments inputted. I looked over and over it however i cant see why the else is giving an error, i have an even amount of if - fi 's and the else is placed within the if - fi code. Im not sure what im doing wrong. Thanks in advance.

  1. Relevant commands, code, scripts, algorithms:

P.S. I am using cygwin in windows to do this script.

  1. The attempts at a solution (include all code and scripts):

  2. Insearch: (University of Technology Sydney), Sydney NSW, Australia, James Hu (web systems), www(dot)insearch.edu.au/default.aspx?ArticleID=430

Note: Without school/professor/course information, you will be banned if you post here! You must complete the entire template (not just parts of it).

Do you mind posting that code with marking, copy&paste instead? When doing so use code tags, thanks. The indention is ugly to non-existent :wink:

Sorry zaxxon but could you lead me somewhere or tell me how specifically? I wasnt aware i could copy and paste in an unix environment.

That window looks like a Windows command window. You should be able to right click on the title bar and select setting for editing etc. (only got the German version here sorry). Hopefully you should be able to mark the code with the mouse and press ctrl+c or middle mouse button or whatever (not sure). Best try it out.

1 Like
#! /bin/sh
choice=0
while [ $choice -ne 4 ]; do
clear
echo "        Menu"
echo "1.Username|Directory|Shell|Calender"
echo "2.Arithmetic Operation"
echo "3.Find the first letter"
echo "4.exit-Please confirm"
echo "Please enter a choice from 1 to 4 only"

read choice
case $choice in
"1")
if [ $# -eq 1 -o $# -eq 2 ]; then
 if [ -d $1 ]; then
echo Your user name is $USER
echo Your Home directory is $HOME
echo Your Default shell is $SHELL
echo Press anykey to see the 2011 calender
read a
cal 2011
echo Press anykey to see long listing of $1
read a
ls -rR $1
  if [ $# -eq 2 ]; then
   if [ -f $2 ]; then
echo "Your name is $USER" >> $2
echo "Your Home directory is $HOME" >> $2
echo "Your Default shell is $SHELL" >> $2
cal 2011 >> $2
ls -rR $1 >> $2
   else
echo The second arguement must be a valid file
   fi
  fi
 else
echo The directory is invalid
 fi
else
echo Please include 1 or 2 arguments in the command
echo Example : ./Assignment4.SH directory file-name
fi
;;


"2");;
"3");;
"4");;
*) echo "Sorry,Invalid choice";;
esac
if [ $choice -ne 4 ]; then
echo "Press Enter to continue"
read a
fi
done
exit

i found the problems to be missing a then within the errroed else and spaces after the code within the [] for the ifs. Is there anything else you can see wrong with code? And thanks for the tip i was told by my lecturer that we couldnt C&P in unix.

This is not Unix/Linux. cygwin is a Linux like environment for Windows. Windows is in this case managing your windows. Cygwin is just being started in a cmd box of Windows so Windows applies^^. So you can lecture your lecturer :smiley: :wink: (just kidding)

I do not see errors in quick glimpse. Do you still get error messages? I recommend that you modify your code indention in the future as it makes reading the logical structure of loops, and control statements like if/then/else/fi or case/esac etc. much easier. Maybe indent them by a whole tab or at least by 4 blanks.

1 Like

On testing there seems to be no more errors. Thanks for your help thus far zaxxon. Ill do the indentation properly now too. If i come across anymore errors i cant figure out straight away ill post back on this thread.