I cannot for the life of me figure this out. It was all running fine until i added another while loop for the directory part, same as the first one. Then i removed the loop and started getting this error.

syntax error near unexpected token `fi'

I have an assignment to write a script to where the user specifies a file to copy then a directory to copy it to, if the directory doesnt exist create it.

the code is:

#!/bin/bash -x

while [ -z $file ]


echo "Please enter the name of the file you want to copy: "

read file


if [ -f $file ]


echo "Enter the directory you want to copy the file to:"

read subdirectory

elif [ ! -f $file ]


echo "$file does not exist. Please run the script again and enter a valid filename"


if [ -d $subdirectory ]


cp $file $subdirectory


mkdir $subdirectory
cp $file


When i run it with bash -x

it goes down to entering the directory

+ ''
+ echo 'Enter the directory you want to copy the file to:'
Enter the directory you want to copy the file to:
+ read subdirectory

then i get

./assignment1.sh: line 42: syntax error near unexpected token `fi'
./assignment1.sh: line 42: `fi'

after i enter a directory

Starting to get panicky now, i have changed things around to no avail, i cannot understand what is wrong. Have to have the assignment done for saturday unfortunately.

Anyway thanks in advance for any help forthcoming :D :D

Error at line #37. Seems like you're trying to implement an else type of thing. Replace elif with else.

Ah thank you, that elif before mkdir. I cant believe i didnt that, also didnt spot it. Too early in the morning!

Thanks very much :)

This article has been dead for over six months. Start a new discussion instead.