#51 Le 31/12/2010, à 09:49
- ehmicky
Re : Script Schell exercice je ne comprend rien
A moins que tu doives être compatible POSIX (enfin ton script, pas toi ) ou utiliser sh, tu devrais utiliser [[ ]] plutôt que test, qui est une autre manière de faire [ ]. [[ ]] offre de nombreux avantages : rapidité, pas de problème si tes variables contiennent des espaces (plus besoin de les entourer de guillemets d'ailleurs), plus lisible que "test", etc.
Par ailleurs, tu devrais mettre des guillemets autour des 3 "$i" et du "$2" au cas où
Stego++, bibliothèque libre de stéganographie (avec cryptographie), à venir !
Besoin de votre aide :
Stats sur les compilateurs C++ les plus utilisés
Comment utiliser les archetypes C++ ?
Hors ligne
#52 Le 31/12/2010, à 11:53
- Tutux80
Re : Script Schell exercice je ne comprend rien
@Levi59
Ah oui j'avait pas vu le -thumbnail en trop, je devais être fatigué "^^
Pour les parentheses, c'est toujuors le même message d'erreur:
./TD8: line 44: Erreur de syntaxe près du symbole inattendu « ( »
./TD8: line 44: ` if test (( $(stat -c %X $i) > $(date -d $2 '+%s') ))'
Pour
$ variable="monfichier.jpg" ; echo ${variable%.*}.png
monfichier.png
Variable est une variable nouvelle d'apres ce que je comprend ?
Je vais mettre de l'ordre dans mon script, compléter avec ses nouvelles info et l'afficherait en entier ^^
@ehmicky
Ok merci, je ne pense pas devoir être compatible POSIX je ne sais même pas ce que c'est "^^
J'espere que vous passerez un joyeux réveillon, bonne année a vous ^^
Merci de toute l'aide apportée
Hors ligne
#53 Le 31/12/2010, à 12:59
- Totor
Re : Script Schell exercice je ne comprend rien
pour ton erreur de parenthèse :
if test (( $(stat -c %X $i) > $(date -d $2 '+%s') ))
le mot clef test est en trop. la condition arithmétique est gérée par (( ... )). Ce qui donne :
if (( $(stat -c %X $i) > $(date -d $2 '+%s') ))
Dernière modification par Totor (Le 31/12/2010, à 12:59)
-- Lucid Lynx --
Hors ligne
#54 Le 31/12/2010, à 13:05
- Levi59
Re : Script Schell exercice je ne comprend rien
@Levi59
Ah oui j'avait pas vu le -thumbnail en trop, je devais être fatigué "^^
Pour les parentheses, c'est toujuors le même message d'erreur:./TD8: line 44: Erreur de syntaxe près du symbole inattendu « ( » ./TD8: line 44: ` if test (( $(stat -c %X $i) > $(date -d $2 '+%s') ))'
Bah forcement que l'erreur reste si tu n'essayais pas avec mes 2 propositions... Bref Totor t'as donné l'erreur donc c'est bon.
Pour
$ variable="monfichier.jpg" ; echo ${variable%.*}.png monfichier.png
Variable est une variable nouvelle d'après ce que je comprend ?
Je vais mettre de l'ordre dans mon script, compléter avec ses nouvelles info et l'afficherait en entier ^^
C'est un exemple fait en console mais tu peux l'utiliser sur n'importe quel variable (comme ${i} par exemple... )
Dernière modification par Levi59 (Le 31/12/2010, à 13:52)
Hors ligne
#55 Le 02/01/2011, à 21:38
- kreuk801
Re : Script Schell exercice je ne comprend rien
Bonjour a tous voila j'ai le mm travail a faire pour la rentrer , je vous poste donc mon script pour savoir se que je peux corriger d'apres vous , merci d'avances
#!/bin/bash
echo "entrez une date "
read dat
echo "entrez un repartoire"
read rep
# test nombres d'arguments
if ! (( "$#" != 2 ))
then
echo "Nombres d'arguments invalide"
exit 1
fi
#test existence et type du fichier
if (( -f "$rep" ))
then
echo "$rep existe "
else
echo "$rep n'est pas present "
exit 2
fi
#test droits
if test -d $rep && test -w $rep
then
echo "vous possèdez les droits sur $rep"
else
echo "vous ne possèder pas les droits sur $rep"
exit 3
fi
# séparer date
echo $2
jour=$(echo $2 | cut -c5,6)
mois=$(echo $2 | cut -c3,4)
annee=$(echo $2 | cut -c1,2)
#test format date
if ! date -d "${mois}/${jour}/${annee}" >&/dev/null then
echo "format de dat non valide"
exit 1
else
echo "date OK"
fi
#convertion image et cration dossier
for i in $(ls ;/*.jpg)
do
if (($date > $datefichier)
then
echo " la date de modification du fichier : $x est bien inferieur a celle donnée en arguement "
convert $x -thumbail '100x100' ./miniature.png
echo "creation de l'imagette "
fi
done exit 0
Hors ligne
#56 Le 02/01/2011, à 22:55
- Levi59
Re : Script Schell exercice je ne comprend rien
Tu as essayé ton script? Parce que dès le début il y a une erreur qui bloque la suite... Le minimum, c'est au moins de tester son script (Je te l'avais déjà dis en plus!)
Edit² : Désolé en fait, je n'avais pas vu qu'il s'agissait de quelqu'un d'autre... D'un autre coté, ça ne retire en rien les remarques faites. Je te conseille de relire l'intégralité de ce topic (c'est pas nom plus très long) car il contient beaucoup de réponses pour les corrections.
Et évite de copier coller des bouts de codes si tu n'es pas sûr de toi... J'ai repéré au moins trois parties avec des "écritures" distincts.
Edit : Bon j'ai pas l'impression que tu ais cherché à bien faire (C'est ma première impression et pour être honnête, ça sera celle de ton prof à coup sûr. Mon beau père étant prof, je peux te dire qu'il va pas chercher midi à 14 heure si tu rends ce type de travail)
J'ai directement commenté le code et mis entre parenthèse à la fin une appréciation (Faux, valide, gênant)
#!/bin/bash
#----------------- Indication du format de la date? (gênant à l'usage mais pas grave)
echo "entrez une date "
read dat
echo "entrez un repertoire" #Erreur de frappe (pas grave)
read rep
#----------------- Ton script est censé accepter des arguments, c'est à dire etre utilisé
#----------------- sous la forme : imagette aammjj /chemin/vers/dossier/
#----------------- Ou si tu es plus aventurier :
#----------------- imagette -d aammjj -f /chemin/vers/dossier/
#----------------- La récupération fonctionne mais tu est hors sujet vis à vis de l'exercice
# test nombres d'arguments
if ! (( "$#" != 2 ))
#----------------- != signifie différent et le point d'exclamation avant les parenthèses indique
#----------------- inverser le résultat, faux si vrai et vice versa
#----------------- Ici tu dis donc, si 2 arguments, nombre d'arguments invalide.
#----------------- Le test ne s'active pas donc ton utilisation est fausse, normal puisque
#----------------- tu n'utilises pas d'arguments, cf précédemment (Faux)
then
echo "Nombres d'arguments invalide"
exit 1
fi
#test existence et type du fichier
if (( -f "$rep" ))
#----------------- -f signifie "est un fichier" hors, tu tests un dossier...
#----------------- [remplacer -f par le bon test] (Faux)
then
echo "$rep existe "
else
echo "$rep n'est pas present "
exit 2
fi
#test droits
if test -d $rep && test -w $rep
#----------------- ici tu test correctement qu'il s'agit d'un dossier (-d) ce qui est inutile
#----------------- puisque normalement le test est déjà fait avant. -w est utilisé correctement
#----------------- Ce test peut être simplifié
#----------------- À noter que tu n'a pas mis de guillemets, ce qui peut faire planter le
#----------------- script si $rep est nul donc toujours écrire ainsi : "${rep}" (pas grave)
then
echo "vous possèdez les droits sur $rep"
else
echo "vous ne possèder pas les droits sur $rep"
exit 3
fi
# séparer date
#----------------- Il n'y a pas de variable $2 puisque tu n'utilise pas d'argument
#----------------- tu as juste créé 2 variables via des questions à l'utilisateur
#----------------- En plus tu découpe la date pour la tester avec date, alors que
#----------------- cette commande est capable de tester la validité elle même. (Faux)
echo $2
jour=$(echo $2 | cut -c5,6)
mois=$(echo $2 | cut -c3,4)
annee=$(echo $2 | cut -c1,2)
#test format date
#----------------- Le test en lui même est farfelu (mois jour année ?) mais valide.
#----------------- Je te conseille tout de même de faire au plus simple... (valide)
if ! date -d "${mois}/${jour}/${annee}" >&/dev/null then
echo "format de dat non valide"
exit 1
else
echo "date OK"
fi
#convertion image et cration dossier
#----------------- la synthaxe est fausse. "for i in" signifie "à chaque boucle,
#----------------- définir i comme l'élément suivant de"
#----------------- ici tu définie une variable résultat de la commande qu'elle contient,
#----------------- mais tu y met 2 éléments distincts donc c'est faux. Ici, je t'aide,
#----------------- ls ne sert à rien "*.jpg" suffit. (Faux)
for i in $(ls ;/*.jpg)
do
#----------------- Ici tu tests des nombres donc il vaut mieux utiliser -gt à la place
#----------------- de > et tu as oublié une parenthèse ce qui rend le test caduque.
#----------------- Tu n'as pas non plus mis de guillemets.
#----------------- (Faux mais peut être une erreur de frappe...)
if (($date > $datefichier)
then
echo " la date de modification du fichier : $x est bien inferieur a celle donnée en arguement "
#----------------- dans l'exercice, tu dois mettre les miniatures dans un dossier
#----------------- nommé "miniatures" dans le dossier d'images. Ici tu renommes
#----------------- chaque image convertie en "miniature.png" dans le même dossier.
#----------------- À la fin des boucles, tu te retrouve donc avec une seule miniature
#----------------- de la dernière image traitée et toutes les autres ont
#----------------- été écrasées... (Faux)
convert $x -thumbail '100x100' ./miniature.png
echo "creation de l'imagette "
fi
done exit 0
Dernière modification par Levi59 (Le 02/01/2011, à 23:14)
Hors ligne
#57 Le 03/01/2011, à 00:53
- kreuk801
Re : Script Schell exercice je ne comprend rien
Voila ma correction :
#!/bin/bash
echo "entrez une date et un repertoire "
# test nombres d'arguments
if (( "$#" != 2 ))
then
echo "Nombres d'arguments invalide"
exit 1
fi
#mise des arguement dans des variables
dat=$1
rep=$2
#test existence et type du fichier
if (( -d "$rep" ))
then
echo "$rep existe "
else
echo "$rep n'est pas present "
exit 2
fi
#test droits
if -w $rep
then
echo "vous possèdez les droits sur $rep"
else
echo "vous ne possèder pas les droits sur $rep"
exit 3
fi
#test format date
if ! date -d "${mois}/${jour}/${annee}" >&/dev/null then
echo "format de la date non valide"
exit 1
else
echo "date OK"
fi
#convertion image et cration dossier
$y=0
for i in $(ls -1 $1/*.png)
if (("$date -gt $datefichier"))
then
cd ~/$rep
mkdir miniatures
cd ~/rep/miniatures
echo " la date de modification du fichier : $x est bien inferieur a celle donnée en arguement "
convert $x -thumbail '100x100' ./miniature$y.png
echo "creation de l'imagette "
($y=$y+1)
fi
done exit 0
Pour te répondre , j'ai beaucoup de mal avec les script shell, et quelque probleme on fait que je n'ai pu le faire qu'aujourd'hui , voila pourquoi mon shell ne te parrait pas terrible .
En tout cas j'espere que celui la te conviendra mieux ( je sais qu'il y a une erreur au nivau duu test des arguement mais je vois pas pourquoi )
Merci de ton aide en tout cas
Hors ligne
#58 Le 03/01/2011, à 01:31
- Levi59
Re : Script Schell exercice je ne comprend rien
#!/bin/bash
# -------------------------- Inutile car les arguments sont donnés avant exécution (pas gênant)
echo "entrez une date et un repertoire "
# test nombres d'arguments
if (( "$#" != 2 ))
then
echo "Nombres d'arguments invalide"
exit 1
fi
#mise des arguement dans des variables
dat=$1
rep=$2
#test existence et type du fichier
if (( -d "$rep" ))
then
echo "$rep existe "
else
echo "$rep n'est pas present "
exit 2
fi
#test droits
# -------------------------- tu ecris correctement les test avant et là tu ignore la syntaxe correct (à corriger)
if -w $rep
then
echo "vous possèdez les droits sur $rep"
else
echo "vous ne possèder pas les droits sur $rep"
exit 3
fi
#test format date
# -------------------------- les variables (mois, jour et année) ne sont plus valides... Tu as défini une variable $dat donc autant t'en servir. (à corriger)
if ! date -d "${mois}/${jour}/${annee}" >&/dev/null then
echo "format de la date non valide"
exit 1
else
echo "date OK"
fi
#convertion image et cration dossier
# -------------------------- plusieurs choses...
# -------------------------- 1) Je t'ai conseillé de relire le topic car des réponses y sont disséminées :
# -------------------------- [citation] for variable in (motif ou ensemble) ... le (motif ou ensemble) est soit
# -------------------------- une pattern comme *.jpg (qui veut dire tous les fichiers se terminant par .jpg)
# -------------------------- [/citation]
# -------------------------- 2) le test : si tu ne mets que des guillemets avant et après, tu transforme le tout en une chaine.
# -------------------------- ça équivaut à mettre if (("une phrase dénuée de sens")). Il faut mettre des guillemets juste
# -------------------------- pour entourer les variables : "${variable}".
# -------------------------- 3) Attention au oublis de "$", ex: /rep/miniature au lieu de /"$rep"/miniature.
# -------------------------- 4) ~/ équivaut à /home/user/ donc ça n'a aucun sens d'écrire ~/$rep/ car si l'utilisateur défini
# -------------------------- un répertoire, ce n'est pas forcément dans son dossier personnel.
# -------------------------- 5) Ici ton écriture est fausse et il y en a une plus simple: y=$(($y+1)) <==> ((y++))
# -------------------------- idem pour [s]$y=0[/s] => y=0
# -------------------------- 6) Tu ne définis ni $date, ni $datefichier, ni $x. En l'état ce test équivaut à comparer le vide au vide...
# -------------------------- 7) à chaque boucle, tu vas faire un dossier miniature, y descendre, convertir un fichier $x non défini
# -------------------------- et qui n'y sera pas puisque tu as changer de dossier puis dans le dossier miniature précédent recréer
# -------------------------- un dossier miniature, y descendre... Y'a un gros problème avec la boucle! Je te conseille sérieusement
# -------------------------- de mettre l'ensemble de la procédure sur papier et de réflechir par toi même à un code valide.
# -------------------------- (PLUS DE COPIER COLLER) Car tu ne feras que des erreur en continuant ainsi.
$y=0
for i in $(ls -1 $1/*.png)
if (("$date -gt $datefichier"))
then
cd ~/$rep
mkdir miniatures
cd ~/rep/miniatures
echo " la date de modification du fichier : $x est bien inferieur a celle donnée en arguement "
convert $x -thumbail '100x100' ./miniature$y.png
echo "creation de l'imagette "
($y=$y+1)
fi
done exit 0
Dernière modification par Levi59 (Le 03/01/2011, à 01:42)
Hors ligne
#59 Le 03/01/2011, à 01:47
- kreuk801
Re : Script Schell exercice je ne comprend rien
Voila j'ai apporté les corrections , et en fesant quelques changements mon script a l'air de marcher .
En tout les cas merci de ton aide et du temps que tu a pris pour m'aider
A charge de revanche lol
Hors ligne
#60 Le 03/01/2011, à 02:02
- Levi59
Re : Script Schell exercice je ne comprend rien
De rien! Heureux d'avoir pu t'aider.
J'espère que tu n'auras pas été vexer par mes premières remarques mais s'agissant d'un devoir, je me devais d'être franc pour t'amener à un résultat satisfaisant.
N'hésite pas à revenir faire appelle à la communauté! ^^
Hors ligne
#61 Le 03/01/2011, à 02:33
- kreuk801
Re : Script Schell exercice je ne comprend rien
Pas de problème pour ca ne t'inquiète pas je suis ouvert a la critiques et tes remarques étaient vrais même si j'avais mes raisons
A le prochaine !
Hors ligne