syntax error near unexpected token `if'

13,199

Solution 1

I think you're just missing the do clause of the for loop:

#declare $PICPATH, etc...

for file in $PICPATH; do
    if [ ${file -5} == ".jpeg" -o ${file -4} == ".jpg" ];
    then
        #do some exif related stuff here.
    else
        #throw some errors
    fi
done

Solution 2

${file -5}

is a syntax error. Maybe you mean

${file#*.}

?

Anyway, better do :

for file in $PICPATH; do
    image_type="$(file -i "$file" | awk '{print gensub(";", "", $2)}')"
    case $image_type in
        image/jpeg)
            # do something with jpg "$file"
        ;;
        image/png)
            # do something with png "$file"
        ;;
        *)
            echo >&2 "not implemented $image_type type "
            exit 1
        ;;
    esac
done

If you only want to treat jpg files, do :

for file in $PICPATH; do
    image_type="$(file -i "$file" | awk '{print gensub(";", "", $2)}')"
    if [[ $image_type == image/jpeg ]]; then
            # do something with jpg "$file"
    fi
done
Share:
13,199
el HO
Author by

el HO

Wat?

Updated on June 17, 2022

Comments

  • el HO
    el HO almost 2 years

    I am currently trying to write a bash script which helps me step through a directory and check for .jpeg or .jpg extensions on files. I've come up with the following:

    #declare $PICPATH, etc...
    
    for file in $PICPATH
        if [ ${file -5} == ".jpeg" -o ${file -4} == ".jpg" ];
        then
            #do some exif related stuff here.
        else
            #throw some errors
        fi
    done
    

    Upon execution, bash keeps throwing a an error on the if line: "syntax error near unexpected token `if'.

    I'm a completely new to scripting; what is wrong with my if statement?

    Thanks.