0

I am having the error "Syntax error near unexpected token `done' " and just can not figure out the script. My code is below:

trap "rm ~/tmp/* 2> /dev/null; exit" 0 1 2 3
phonefile=~/sournce/corp_phones
looptest=y
while [ $looptest" = y ]
do
   clear
   cursor 1 4; echo "Corporate Phone List Additions"
   cursor 2 4; echo "=============================="
   cursor 4 4; echo "Phone Number: "
   cursor 5 4; echo "Last Name   : "
   cursor 6 4; echo "First Name  : "
   cursor 7 4; echo "Middle Init : "
   cursor 8 4; echo "Dept #      : "
   cursor 9 4; echo "Job Title   : "
   cursor 10 4; echo "Date Hired  :"
   cursor 12 4; echo "Add Another? (Y)es or (Q)uit "
   cursor 4 18; read phonenum
   if [ "$phonenum" = 'q' ]
      then
         clear; exit
   fi
   cursor 5 18; read lname
   cursor 6 18; read fname
   cursor 7 18; read midinit
   cursor 8 18; read deptno
   cursor 9 18; read jobtitle
   cursor 10 18; read datehired
#check to see if last name is not a blank before write to disk
   if [ "$lname" >  "        "]
      then
         echo $phonenum:$lname:$fname:$midinit:$deptno:$jobtitle:$datehired >> $phonefile
   fi
   cursor 12 33; read looptest
   if [ "$looptest" = 'q' ]
      then
        clear; exit
   fi
done
  • 1
    The fourth line of the code is missing the left quote while [ $looptest" = y ], it should be while [ "$looptest" = y ] – user88036 Oct 18 '18 at 1:11
1

You've got 3 barriers at the moment:

  1. missing double-quote around $looptest" -- should be "$looptest"
  2. using > to compare strings in "$lname" > ... -- should be if [ "$lname" != ...
  3. set a specific she-bang line so that the script is parsed with the shell you're expecting -- whether bash, zsh, dash, or plain sh.

I'll take a moment here to call out the shellcheck.net service; you can paste your code into the box there and it will give you suggestions and warnings.

  • Thanks for your answer! I'll try those out and see if it fixes it. And i've never heard of shellcheck.net so thank you so much for that – keeperkell13 Oct 18 '18 at 5:24
  • Changing the first one issue you mentioned fixed it for me! Thank you so much – keeperkell13 Oct 18 '18 at 5:28
  • @keeperkell13 If the answer solves your problem, you should Accept it. See What should I do when someone answers my question? – JigglyNaga Oct 19 '18 at 6:41
0

The syntax highlighting here on SE reveals the issue (as would the same in any proper editor), but you need to read the colouring carefully and hope the colours are distinct enough to tell apart.

while [ $looptest" = y ]
do
   cursor 7 4; echo "Middle Init : "
   cursor 8 4; echo "Dept #      : "
   cursor 9 4; echo "Job Title   : "
   ...
done

Everything starting at the quote at $looptest" is shown in red, since it's taken as a quoted string. The next " stops quoting, and the next one starts it again, so the quoted and non-quoted parts of the script are inverted. This continues until the line with the #, which, when now unquoted, starts a comment to the end of the line, removing the effect of the " after it, and restoring the quoting on the rest of the script.

The shell goes on parsing and sees the keyword done while it was actually expecting do before that, hence the error. (do wasn't recognized while it was quoted, of course.)

Without the #, you'd get an error for the parentheses three lines down (they're special syntax tokens), and without them, a more-to-the-point error about getting to EOF while looking for the closing quote.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.