Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#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 smile ) 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

Tutux80 a écrit :

@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.

Tutux80 a écrit :

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... wink )

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 smile

#!/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 wink

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