Script Shell [Défau]

Résolu/Fermé
Mirzo - Modifié par Mirzo le 15/12/2010 à 16:58
Mirzo Messages postés 75 Date d'inscription mercredi 15 décembre 2010 Statut Membre Dernière intervention 14 octobre 2015 - 15 déc. 2010 à 16:47
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  

A voir également:

1 réponse

zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 417
15 déc. 2010 à 16:26
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
Mirzo Messages postés 75 Date d'inscription mercredi 15 décembre 2010 Statut Membre Dernière intervention 14 octobre 2015 16
15 déc. 2010 à 16:36
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
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 417
15 déc. 2010 à 16:44
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
Mirzo Messages postés 75 Date d'inscription mercredi 15 décembre 2010 Statut Membre Dernière intervention 14 octobre 2015 16
15 déc. 2010 à 16:47
Merci bien , je suis encore nouveau dans le sujet.
0