erreur de syntaxe près d’un jeton inattendu «si»

J’essaie actuellement d’écrire un script bash qui m’aide à parcourir un répertoire et à vérifier les extensions .jpeg ou .jpg sur les fichiers. Je suis venu avec ce qui suit:

#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 

Lors de l’exécution, bash continue à lancer une erreur sur la ligne if: “erreur de syntaxe proche d’un jeton inattendu” si “.

Je suis complètement nouveau pour le scripting; qu’est-ce qui ne va pas avec ma déclaration si?

Merci.

Je pense que vous manquez simplement la clause do de la boucle for :

 #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 
 ${file -5} 

est une erreur de syntaxe. Peut-être que tu veux dire

 ${file#*.} 

?

En tout cas, mieux vaut faire:

 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 

Si vous ne voulez traiter que des fichiers jpg , faites:

 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