LinuxQuestions.org

LinuxQuestions.org (/questions/)
-   Linux - Newbie (http://www.linuxquestions.org/questions/linux-newbie-8/)
-   -   Unexpected end-of-file error (bash script) - need another pair of eyes. (http://www.linuxquestions.org/questions/linux-newbie-8/unexpected-end-of-file-error-bash-script-need-another-pair-of-eyes-787062/)

SilversleevesX 02-04-2010 03:09 PM

Unexpected end-of-file error (bash script) - need another pair of eyes.
 
I'm pretty much satisfied that all the i's have been dotted and the t's crossed, so far as if/fi, closed parentheses, in-out quotation marks and the like go. I just need another pair of eyes to be sure. My bash shell keeps insisting on there being a line 32 to this script, while nano, vim and the "cat foo.sh | wc -l" combo all agree with my GUI text editor (with which I wrote 98% of the script -- and yes it's been dos2unix'ed as well)-- there are only 31 lines!

Here's the script:

Code:

#!/bin/bash -x
echo -ne "Fixture Identification Fixer for Exiv2 - FIFE\n"
echo -ne "Please enter the name of the file you want to modify.\n"
read gfile
if [ -e $gfile ]
then
        oldf1=$(exiv2 -PInv $gfile | grep 'FixtureId' | sed 's/^FixtureId[      ]*//')
        echo -e "The word or phrase currently in this file reads: ${oldf1}.\n"
        echo -ne "Do you want to change this Fixture ID to something else?  y/n \n"
        read yesorno
        if [ $yesorno = "n" ]
        then
                echo -ne "No changes made to file ${gfile}\.\n"
        else
                echo "Are you sure? y/n "
                read confirmm
                if [ $confirmm = "n" ]
                then
                        exit 1;
                else
                        exiv2 -M"del Iptc.Application2.FixtureId" modify $gfile
                        echo -e "The old FixtureID has been removed."
                        echo -ne "Please enter the word or phrase to replace '$oldfi .'\n"
                        read newstringhx
                        exiv2 -M"add Iptc.Application2.FixtureId String $newstringhx" modify $gfile
                sleep 1
                        echo -ne "The new phrase, \"$newstringhx\",\n has been written to file \033[37;40m${gfile}.\033[0m\n"
                fi
        fi
else
        echo -e "Sorry, that file is not in this folder."

You might notice one if without an fi. Everytime I add it back, I get an "unexpected token" error for it and its line. So there's got to be some other punctuation or complementary code missing somewhere.

Hope someone finds whatever it is, and can point it out to me. No sweat off my knee if it was something I couldn't see (rhyme unintended).

BZT

irmin 02-04-2010 03:26 PM

If I add an "fi" at the end, the script runs without errors.

But you should replaces

Code:

if [ $yesorno = "n" ]
with
Code:

if [ "X$yesorno" == "Xn" ]
to avoid a problem, if yesorno is empty.

chrism01 02-04-2010 07:11 PM

Use [[ ]] to deal with that http://www.tldp.org/LDP/abs/html/tes...ml#DBLBRACKETS

catkin 02-05-2010 01:04 AM

Quote:

Originally Posted by irmin (Post 3852945)
But you should replaces

Code:

if [ $yesorno = "n" ]
with
Code:

if [ "X$yesorno" == "Xn" ]
to avoid a problem, if yesorno is empty.

More elegantly the problem can be solved like this (the double quotes around n were not wrong but single quotes are adequate)
Code:

if [ "$yesorno" = 'n' ]
But chrism01 is right to point out that [[ ]] is a better solution. [[ ]] is preferred over [ ] for reasons explained here.

catkin 02-05-2010 01:07 AM

This thread is a duplicate of this thread.

SilversleevesX 02-05-2010 10:34 AM

To avoid another duplication...
 
@chrism,

I thought that approach, double-brackets, would be the way to go about it, too. I've found that they do prevent errors of a few types in other scripts. Good to have a reminder.

Quote:

Originally Posted by chrism01 (Post 3853175)

@catkin:

I apologize for the duplicate thread. I'm not certain as to how it occurred, but I suspect it may have been due to a double-login on my part, ie, closing a window with the site (and the original thread) in it and not waiting for the customary timeout before logging back in while viewing another thread (which link opened via Google or some item in my browser history). I'll do what I can to add only to this thread, unless doing so makes deleting its twin more difficult. I'd appreciate your advice on how to proceed.


Quote:

Originally Posted by catkin
This thread is a duplicate of this thread.


BZT

catkin 02-05-2010 10:41 AM

Quote:

Originally Posted by SilversleevesX (Post 3853886)
I apologize for the duplicate thread. I'd appreciate your advice on how to proceed.

No worries :)

You could use the Report button on the first post in one of the threads to ask the moderators to close it.

SilversleevesX 02-05-2010 03:12 PM

Done.
 
Quote:

Originally Posted by catkin (Post 3853895)
No worries :)

You could use the Report button on the first post in one of the threads to ask the moderators to close it.

Done.

BZT


All times are GMT -5. The time now is 01:24 AM.