Script Shell [Défau]

Résolu
Bonjour,

Je suis en train d'essayer de creer un scrip shell afin de créer la miniature d'une image jpg en fonction de sa date de création. Seulement pour la boulce for à la fin du script il y à un problème car l'éxecution s'arrête juste avant et entre apparament dans une boucle infini... Je ne vois pas qu'est ce qui coince ... quelqun pourrait m'aider ?
Merci.

Voici le script :

#! /bin/bash  

# Test le nombre d'arguments  
if (( $# !=2 ))  

then   
 echo "Deux arguments requis"  
 exit 1  
   
fi  

echo "test arguments éfféctué..."  

#Test si le fichier existe et si il est bien un répertoire  
if ! test -d $1  

then   
 echo "$1 : inexistant ou non conforme"  
 exit 2  
    
fi  

echo "test réportoire éfféctué..."  

#Test le droit d'écriture  
if ! test -w $1  

then   
 echo "$1 : Ecriture non autorisée "  
 exit 3  

fi  

echo "test droit d'écriture éfféctué..."      

#Test du nombre de caractères de la date  
if (($(echo $2|wc -c) != 7))  

then   
 echo "$2 : Date incorrecte !"  
 exit 4  

fi  

echo "test longueur date éfféctué..."  

# Test du mois   
if (($(echo $2 | cut -c3,4 ) > 12 )) || (( $(echo $2 | cut -c3,4 ) < 1))  

then   
 echo "$2 : Mois invalide"  
 exit 4  

fi  

echo "test du mois éfféctué.."  

# Test du jour   
if (($(echo $2 | cut -c5,6 ) > 31 )) || (( $(echo $2 | cut -c5,6 ) < 1))  

then   
 echo "$2 : Jour invalide"  
 exit 4  

fi  

echo "test du jour éfféctué..."  

# Création dossier miniature  
cd $1  
if ! test -d miniature  

then  
 mkdir miniature  
 echo "Dossier miniature créer dans le dossier $1."  

fi  

echo "Création du dossier miniature éfféctué..."  

# Conversion des images avec les dates superieur à l'argument $2  
cd ..  

date=$(date -d $2 +%s)  
mini=$(cut -f1 -d.)  
datef=$(stat -c %Y $1/$file)  

for file in $(ls $1 | grep .[Jj][Pp][Gg])  

do  

if (($date < $datef))  

then   
 convert $1/$file -thumbnail '100x100' $1/miniature/$mini.png  
 echo "Création de l'imagette de $1/$file"  
else   
 echo "$1/$file : Date de l'image trop ancienne."  

fi  
done   

echo "conversion éfféctué..."  

exit 0  

1 réponse

  1. Contributeur
    Salut,

    Dans la dernière partie de ton script il y a plusieurs incohérences ;-((

    La définition des variables "$mini" et "$datef" ont lieu avant même la boucle et la définition de la variable "$file", de plus la variable "$mini" est incomplète, il manque le fichier ($file) de référence ;-((

    # Conversion des images avec les dates superieur à l'argument $2
    cd ..
    
    date=$(date -d $2 +%s)
    
    for file in $(ls $1 | grep .[Jj][Pp][Gg])
    
    do
    
    mini=$(cut -f1 -d. <<<$file)
    datef=$(stat -c %Y $1/$file)
    
    if (($date < $datef))
    
    then 
    	convert $1/$file -thumbnail '100x100' $1/miniature/$mini.png
    	echo "Création de l'imagette de $1/$file"
    else 
    	echo "$1/$file : Date de l'image trop ancienne."
    
    fi
    done

    1
    1. Merci beaucoup a toi Zipe31. Quel étourdie ^^ Merci encore de m'avoir éclairer, une fois qu'on est plongé dedans on a parfois du mal à prendre du recul...
      Tout marche bien maintenant.
      0
    2. Contributeur
      Tu peux t'éviter la déclaration de la variable "$mini" avec l'expansion des paramètres :

      convert $1/$file -thumbnail '100x100' $1/miniature/${file%.*}.png
      0
    3. Merci bien , je suis encore nouveau dans le sujet.
      0