Jenny Patel
Jenny Patel

Reputation: 91

getting syntax error: unexpected end of file in bash script

This is my code:

 #!/bin/bash

if [[ -z $1 ]]; then
        echo "No arguments passed: valid usage is script.sh filename"
else if [[ ! -f "$1" ]]; then
        echo "file does not exists"
else
        for i in {558..2005};
        do
                if [[ ! -d "/abc" ]]; then
                        mkdir /abc
                fi
                mkdir /abc/xyz$i
                cp $1 /abc/xyz$i/$1
        done
fi

my error: can anyone please help me i do not know what to do? I do not know where I am making mistake?

./script.sh: line 17: syntax error: unexpected end of file 

Upvotes: 0

Views: 6655

Answers (2)

chepner
chepner

Reputation: 530920

Instead of a single if statement with an elif clause, you nested a second if statement in the else clause of the first, but only terminated the second one. Your code, reformatted to highlight the issue, is

if [[ -z $1 ]]; then
    echo "No arguments passed: valid usage is script.sh filename"
else
    if [[ ! -f "$1" ]]; then
        echo "file does not exists"
    else
        for i in {558..2005};
        do
            if [[ ! -d "/abc" ]]; then
                mkdir /abc
            fi
            mkdir /abc/xyz$i
            cp $1 /abc/xyz$i/$1
        done
    fi

Notice the lack of a second fi which would terminate the outer if statement.

Using elif, your code becomes

if [[ -z $1 ]]; then
    echo "No arguments passed: valid usage is script.sh filename"
elif [[ ! -f "$1" ]]; then
    echo "file does not exists"
else
    for i in {558..2005};
    do
        if [[ ! -d "/abc" ]]; then
            mkdir /abc
        fi
        mkdir /abc/xyz$i
        cp $1 /abc/xyz$i/$1
    done
fi

The elif clause doesn't require a closing fi; it is implicitly terminated by the following else clause.

Upvotes: 2

MichalH
MichalH

Reputation: 1074

Use elif instead of else if.

Syntax of if in bash:

if COMMANDS; then COMMANDS; [ elif COMMANDS; then COMMANDS; ]... [ else COMMANDS; ] fi

Upvotes: 2

Related Questions