Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

syntax error near unexpected token `if'

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.

like image 734
el HO Avatar asked Dec 15 '22 14:12

el HO


2 Answers

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
like image 50
cyfur01 Avatar answered Dec 18 '22 05:12

cyfur01


${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
like image 36
Gilles Quenot Avatar answered Dec 18 '22 05:12

Gilles Quenot