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.

#1 Le 24/12/2010, à 03:48

Tutux80

Script Schell exercice je ne comprend rien

Bonjour,
Voila je suis étudiant en informatique, 1ère année de DUT, et ait un exercice a faire, pour ce j'ai installé VirtualBox et ait télécharger Ubuntu 10.10.
J'ai commencé et ait déjà passé plusieurs heures à essayer mais n'y arrive pas. Si quelqu'un pourrait m'aider...
Je ne demande pas a ce que l'on me fasse le travail mais si quelqu'un a le temps malgré la période de noël de m'expliquer comment faire.
Si possible par msn, c'est plus simple pour expliquer, si quelqu'un en a l'envie (:
tutux80@hotmail.fr
Merci d'avance
Joyeuses fêtes à tous

Hors ligne

#2 Le 24/12/2010, à 08:31

chopinhauer

Re : Script Schell exercice je ne comprend rien

Vaudrait mieux que t'expliques dans le texte de ton message.


Pensez à donner un bon titre à vos sujets : cela permettra d'aider d'autres utilisateurs dans votre même situation. Ce n'est pas qu'en donnant des solutions qu'on aide, mais aussi en posant des bonnes questions et… facilement trouvables.

Hors ligne

#3 Le 27/12/2010, à 16:52

Tutux80

Re : Script Schell exercice je ne comprend rien

http://www.cijoint.fr/cjlink.php?file=c … Rxcr7m.txt
Voila ce que j'ai fait ainsi que l'énoncé.
J'ai été voir sur le site du zéro ou il y a un tutoriel mais je n'arrive pas a avancé je ne voit pas comment faire...

Hors ligne

#4 Le 27/12/2010, à 18:43

ehmicky

Re : Script Schell exercice je ne comprend rien

Quelques indications :
  - le premier if n'est pas fermé par un fi
  - pour parser la date, tu peux utiliser date -d, par exemple :

an="$(date -d "$2" "+%Y")"

  - tu pourrais vérifier que $2 est bien un nombre. Sinon, tu ne vérifies pas que les mois, etc. ne sont pas <= 0.
  - sinon, il manque une bonne partie du problème : création des vignettes, etc.
  - tu ne fais pas d'exit en cas de date non valide


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

#5 Le 27/12/2010, à 20:00

Tutux80

Re : Script Schell exercice je ne comprend rien

oui pour la date j'ai réussi j'ai fait ça
echo "$(date -d $2 +%s)"
pour verifier si c'est bien <=0 j'ai ajouté
& ((mois<=0))
et pour l'exit il faut juste que je rajoute
exit 0
avant les else ?
La il me dit erreur a la ligne 37 mais la ligne 37 est la toute derniere et il n'y a rien dessus >.<

Hors ligne

#6 Le 27/12/2010, à 20:25

ehmicky

Re : Script Schell exercice je ne comprend rien

Sinon, plutôt que d'uploader un fichier .txt, tu peux copier-coller entre deux balises |code| smile
Par ailleurs, echo "$(date... est redondant, parce que date imprime déjà sur la sortie standard.
Sinon, s'il y a une erreur, faut poster le message d'erreur smile


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

#7 Le 27/12/2010, à 21:26

Tutux80

Re : Script Schell exercice je ne comprend rien

|code| ./TD8: line 37: Erreur de syntaxe : fin de fichier prématurée |code|
voila ce que ça me dit

Hors ligne

#8 Le 27/12/2010, à 23:44

ehmicky

Re : Script Schell exercice je ne comprend rien

Les balises ne sont pas |code| mais avec des crochets (que je ne peux pas écrire sinon ça ne s'affichera pas), il y a un bouton pour ça.
Sinon cette erreur indique une boucle ou une structure (comme if) non fermée ou des guillemets non closes.


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

#9 Le 28/12/2010, à 00:06

Levi59

Re : Script Schell exercice je ne comprend rien

{tape l'incruste...} C'est le bouton <> entre l'image et la bulle de BD pour la balise code, Bon courage pour ton TP! {repart...}

Hors ligne

#10 Le 28/12/2010, à 13:59

Tutux80

Re : Script Schell exercice je ne comprend rien

Voila j'ai rajouté quelques modifications, ce n'est pas encore complet, mais avant de continuer j'aimerais juste savoir si je doit modifier quelque chose ou si sa a l'air correct pour la suite, merci d'avance.

#!/bin/bash

# test nombres d'arguments

if ! (( $# == 2 )) 
then 
    echo "Nombres d'arguments invalide"
    exit 1
fi

# séparer date

echo $2
jour=$(echo $2 | cut -c5,6)
mois=$(echo $2 | cut -c3,4)
annee=$(echo $2 | cut -c1,2)

# Verification date

if (($mois>12)) & (($mois<=0)) 
then echo "format non valide"
    exit 0
    else
    echo "ok"
fi

if (($jour>31)) & (($jour<=0))
then 
    echo "format non valide"
    exit 0
    else
    echo "ok"
fi

# epoch

echo "Depuis votre date $(date -d $2 +%Y) secondes se sont écoulées"

Merci pour l'info des balises et pour le bon courage ^^

Dernière modification par Tutux80 (Le 28/12/2010, à 14:03)

Hors ligne

#11 Le 28/12/2010, à 14:27

Levi59

Re : Script Schell exercice je ne comprend rien

Tutux80 a écrit :

Voila j'ai rajouté quelques modifications, ce n'est pas encore complet, mais avant de continuer j'aimerais juste savoir si je doit modifier quelque chose ou si sa a l'air correct pour la suite, merci d'avance.

#!/bin/bash

# test nombres d'arguments

if ! (( $# == 2 ))                         # toujours mettre des guillemets autour des variables dans les test "$#"
then                                          # tu peux aussi écrire : if [ "$#" != 2 ]
    echo "Nombres d'arguments invalide"
    exit 1
fi

# séparer date

echo $2                                  # Pour mettre la date en epoch : date -d $2 '+%s'     
jour=$(echo $2 | cut -c5,6)     #  (en plus, si le format est mauvais, tu as une erreur!)
mois=$(echo $2 | cut -c3,4)
annee=$(echo $2 | cut -c1,2)

# Verification date

if (($mois>12)) & (($mois<=0)) 
then echo "format non valide"
    exit 0
    else
    echo "ok"
fi

if (($jour>31)) & (($jour<=0))
then 
    echo "format non valide"
    exit 0
    else
    echo "ok"
fi

# epoch              <== Attention! tu confonds, Epoch désigne le nombre de secondes écoulé depuis le 1er janvier 1970, 00:00 et non depuis la date indiquée...

echo "Depuis votre date $(date -d $2 +%Y) secondes se sont écoulées"

Merci pour l'info des balises et pour le bon courage ^^

Hors ligne

#12 Le 28/12/2010, à 15:01

Totor

Re : Script Schell exercice je ne comprend rien

Bonjour,

Quelques remarques sur ton code :
Récupération des infos sur la date :

jour=$(echo $2 | cut -c5,6)
mois=$(echo $2 | cut -c3,4)
annee=$(echo $2 | cut -c1,2)

Bash fourni des outils, via l'expansion de paramètre permettant d'effectuer ce genre de chose sans utiliser des outils externes (cut dans le cas présent).
Il est donc tout à fait possible d'extraire un texte d'une chaine de caractères.
Ce qui donne :

# version "normale" pour le jour : 
# jour=${2:4:2}
# version simplifiée pour le jour :
jour=${2:4}
mois="${2:2:2}
annee="${2:0:2}"

Verification date

if (($mois>12)) & (($mois<=0))
if (($jour>31)) & (($jour<=0))

l'opérateur logique ET est un double &. Le simple & permet d'exécuter une instruction en fond de tache.

if ((mois>12 && mois<=0))
if ((jour>31 && jour<=0))

Aussi, ta condition n'est pas bonne : l'opérateur logique à utiliser est OU et non ET:

if ((mois>12 || mois<=0))
if ((jour>31 || jour<=0))

Cela dit, la meilleure façon de vérifier si une date est valide ou non est d'utiliser l'instruction date pour cela :

if ! date -d "${mois}/${jour}/${annee}" >&/dev/null then
  echo "Format de date non valide"
  exit 1
else
    echo "Date ok."
fi

Au passage, j'ai changé le code retour  "exit 0" --> "exit 1" car la valeur 0 a pour signification que tout est ok.

@Levi59

Levi59 a écrit :

# epoch              <== Attention! tu confonds, Epoch désigne le nombre de secondes écoulé depuis le 1er janvier 1970, 00:00 et non depuis la date indiquée...

Si une date est spécifiée, %s permet de fournir le nombre de seconde depuis epoch. Cela ne concerne pas seulement la date réelle au moment de l'exécution de l'instruction.

Dernière modification par Totor (Le 28/12/2010, à 15:41)


-- Lucid Lynx --

Hors ligne

#13 Le 28/12/2010, à 15:59

Tutux80

Re : Script Schell exercice je ne comprend rien

Ok merci beaucoup, je vais tenter d'attaquer la suite, je suis restimulé !! ^^

Hors ligne

#14 Le 28/12/2010, à 17:28

Tutux80

Re : Script Schell exercice je ne comprend rien

Bon, en fait j'arrive pas, je ne suis pas bloqué au codage, je suis pas sur d'avoir compris ce qu'il faille faire.
D'après ce que j'ai compris il faut créé un imagette au format .png 100x100 pixels dans un autre dossier nommé miniature  pour chaque image au format .jpg contenu dans un dossier passé en argument  et qui ont été après la date passée en argument.
C'est bien ça ?

Hors ligne

#15 Le 28/12/2010, à 18:23

Levi59

Re : Script Schell exercice je ne comprend rien

J'ai créé ma propre version de ce script pour m'entrainer... Il n'est pas parfaitement aux normes de l'énoncé (quoique celui-ci étant un peu vague, on pourrait considérer ma solution comme valide) mais il fait ce qui est demandé.
Normalement il marche mais j'ai un problème avec la commande convert qui me bloque (convert refuse de fonctionner quelque soit l'option...).
Edit: bas non, c'est bon... Il suffit que je le dise pour que ca remarche sans raison roll
Donc il marche très bien! ^^

Il est pas super facile pour un débutant mais accessible avec un peu de réflexion. Et pour ta question, oui c'est bien ça.

Si je devais te donner un conseil, ce serait de commencer par les tests visant à vérifier les arguments (format de date[fait], le dossier, les droits...) Si tu fais ca, il ne te resteras plus que la vérification de la date de modification et la conversion (qui se fait en dernier et dont tu as déjà la commande générale).

Edit²:
Juste une question, le code d'erreur renvoyé, c'est une information texte (echo erreur X) ou bien la sortie "stderr"?
Je suppose que si tu ne connais pas le second, c'est qu'il doit s'agir d'un echo...

Dernière modification par Levi59 (Le 28/12/2010, à 18:38)

Hors ligne

#16 Le 28/12/2010, à 19:34

Tutux80

Re : Script Schell exercice je ne comprend rien

Hmmm bah quand il y a une erreur, d'argument par exemple, sa affiche dans la console "Erreur nombre d'arguments" c'est tout ce que je sais "^^
Pour vérifier les droits sur le dossier j'ai tenté sa:

if ((test -d $1 && test -w $1))
    then 
           echo "$1 Droits ok"
    else
           echo "$1 Droits non ok"
fi

Mais sa me dit qu'il y a une erreur apres le else...

Ah nan sa y est ^^ je pense que c'est bon j'ai enlevé les parentheses dans le if et sa fonctionne

Dernière modification par Tutux80 (Le 28/12/2010, à 19:50)

Hors ligne

#17 Le 28/12/2010, à 19:53

Levi59

Re : Script Schell exercice je ne comprend rien

Ok je posait la question car dans ton exercice, il y a différents codes d'erreurs en fonction des diverses test à faire.

Hors ligne

#18 Le 28/12/2010, à 20:03

Tutux80

Re : Script Schell exercice je ne comprend rien

Il faut que je verifie quoi maintenant ?
pour les droits sur le dossier j'ai essayer sur deux dossiers differents, un avec et un sans les droits et sa fonctionne ^^

Hors ligne

#19 Le 28/12/2010, à 21:23

Levi59

Re : Script Schell exercice je ne comprend rien

exo a écrit :

Ecrire un script-schell référencé imagette qui admet en argument :
- Un nom de répertoire
- Une date au format aammjj

Ça à priori, tu l'as fait.

exo a écrit :

Et qui créé, pour chaque image au format « point jpg » contenue dans le répertoire passé en argument et dont la date de dernière modification est postérieur à celle passée en second argument, une imagette (thumbnail) au format « point png » et de taille 100x100 pixels.
Ces imagettes sont placées dans un nouveau répertoire référencé miniatures et créé dans le répertoire passé en première argument.
-La commande convert permet de réaliser via la ligne de commande, un grand nombre d'opérations sur les images : conversion d'un type à un autre, redimensionnement,…
Exemple : convert photo.jpg photo.gif
      Elle peut également créer des imagette avec l'option –thumbnail, par exemple
     Convert photo.jpg –thumbnail '200x200' thumb.jpg

Ça tu le fera en dernier.

exo a écrit :

-    Pour comparer les dates, il semble judicieux de les représenter en nombre de secondes depuis l'Epoch, c'est-à-dire depuis la date initiale à partir de laquelle est mesurée le temps sous Unix ( soit le 1er janvier 1970, 00:00)
Pour cela :
-    La commande date peut convertir une date donnée sous le format aammjj en nombre de secondes depuis l'Epoch.

Ça tu as trouvé aussi.

exo a écrit :

-    La commande stat peut récupérer la date de dernière modification d'un fichier et là aussi, la convertir en nombre de secondes depuis l'Epoch.

Ça tu dois trouver la fonction (date permet aussi de récupérer cette donnée)

exo a écrit :

Contraintes:
On programmera dans « l'esprit Unix ». On oubliera donc pas de tester :
- Le nombre d'argument
- L'existance et le type du fichier passé en argument
- L'autorisation du droit d'écriture sur ce répertoire ( pour permettre la création du sous répertoire miniatures )
- Le format correct de la date passée en arguments.
Le code de retour renvoyé sera :
- Egal à 1 en cas de problème d'argument
- Egal à 2 en cas de problème d'existence ou de type du fichier passé en argument
- Egal à 3 en cas de problème de droit d'écriture
- Egal à 4 en cas de problème de format de date
- Conforme à l'esprit Unix si tout va bien

Voici donc les tests à effectuer en premier et dans l'ordre ( nombre d'argument, format correct de la date, autorisation du droit d'écriture sur ce répertoire et aussi qu'il s'agit bien d'un répertoire et un code d'erreur pour chaque situation précédemment cité )

Hors ligne

#20 Le 28/12/2010, à 21:48

Tutux80

Re : Script Schell exercice je ne comprend rien

Ah merci beaucoup c'est ça qui me manquait un découpage de ce que je doit faire ^^ merci ^^

Hors ligne

#21 Le 28/12/2010, à 22:48

ehmicky

Re : Script Schell exercice je ne comprend rien

Tutux80 a écrit :
if ((test -d $1 && test -w $1))

Il faudrait faire plutôt :

if [[ -d $1 && -w $1 ]]

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

#22 Le 28/12/2010, à 23:26

Totor

Re : Script Schell exercice je ne comprend rien

je poste un code pour te montrer le "peu" de ligne que l'on te demande.
je te déconseille fortement de le rendre à ton prof car il saura que tu n'en es pas l'auteur (tu n'en as pas le niveau et c'est une façon de scripter non enseignée)

#!/bin/bash

(($# != 2)) && {
    cat >&2 <<-EOF
    Nombre de paramètre non valide !
    Usage : ${0##*/} <Dossier> <Date au format AAMMJJ>
EOF
    exit 1
} 

monDossier="${1}"
maDate="${2}"

[ -d "${monDossier}" ] || {
    echo >&2 "${monDossier} n'est pas un dossier valide !"
    exit 2
}

thumbnailDossier="$(cd "${monDossier}/miniatures";pwd)"

[ -w "${monDossier}" ] || {
    echo >&2 "Vous n'avez pas le droit d'écriture sur ${monDossier} !"
    exit 3
}

secondes=$(date -d "${maDate}" +"%s" 2>/dev/null) || {
    echo >&2 "${maDate} n'est pas une date valide !"
    exit 4
}

shopt -s nocaseglob nullglob
cd "${monDossier}"
for uneImage in *.jpg
do
    (( $(stat -c '%Y' "${uneImage}") > ${secondes} )) && {
        mkdir -p "${thumbnailDossier}"
        
        thumbnail="${thumbnailDossier}/${uneImage%.*}.png"
        printf "Création de la miniature %s : " "${thumbnail}"
        erreur="$(convert "${uneImage}" -thumbnail '100x100' "${thumbnail}" 2>&1 1>/dev/null)"  && echo "OK" || echo "KO"
        [[ "${erreur}" ]] && {
            echo >&2 "${erreur}"
            exit 5
        }
    }
done

EDIT : A noter qu'en fonction de la version des coreutils, l'utilisation tel que j'en fait de l'instruction date pour vérifier le format de date peut ne pas fonctionner.

Dernière modification par Totor (Le 28/12/2010, à 23:40)


-- Lucid Lynx --

Hors ligne

#23 Le 29/12/2010, à 00:23

Levi59

Re : Script Schell exercice je ne comprend rien

Pour ma culture personnel:

echo >&2 c'est pour rediriger sur stderr c'est bien ça?
shopt te sert sert à quoi?
Et pourquoi vérifier l'erreur sur convert puisque en théorie, on a bien vérifié chaque composante (est un dossier, est une date valide...)?

erreur="$(convert "${uneImage}" -thumbnail '100x100' "${thumbnail}" 2>&1 1>/dev/null)"  && echo "OK" || echo "KO"

Je mettrais ma vision (amateur je le souligne) de ce script demain.

Edit:
je viens de voir mais le format de la date c'est aaaammjj (Cf EOF)

Dernière modification par Levi59 (Le 29/12/2010, à 00:25)

Hors ligne

#24 Le 29/12/2010, à 10:37

Totor

Re : Script Schell exercice je ne comprend rien

Levi59 a écrit :

echo >&2 c'est pour rediriger sur stderr c'est bien ça?

Oui

Levi59 a écrit :

shopt te sert sert à quoi?

à positionner des options (SHell OPTion)

Levi59 a écrit :

Et pourquoi vérifier l'erreur sur convert puisque en théorie, on a bien vérifié chaque composante (est un dossier, est une date valide...)?

erreur="$(convert "${uneImage}" -thumbnail '100x100' "${thumbnail}" 2>&1 1>/dev/null)"  && echo "OK" || echo "KO"

Les vérifications ne sont pas suffisantes. Elles consistent uniquement à vérifier que l'on peut écrire dans le dossier mais cela n'implique pas que le droit de lecture du fichier "image" ou encore qu'il y ait suffisamment d'espace disque pour créer la vignette.
D'ailleurs, il faudrait également vérifier que l'utilisateur ait le droit de lecture sur le dossier. Sinon, il ne pourrait pas lister les images.

Levi59 a écrit :

je viens de voir mais le format de la date c'est aaaammjj (Cf EOF)

cf Enoncé.txt

http://www.cijoint.fr/cj201012/cijSRxcr7m.txt a écrit :

- Une date au format aammjj

Dernière modification par Totor (Le 29/12/2010, à 11:05)


-- Lucid Lynx --

Hors ligne

#25 Le 29/12/2010, à 10:56

Levi59

Re : Script Schell exercice je ne comprend rien

Totor a écrit :
Levi59 a écrit :

Et pourquoi vérifier l'erreur sur convert puisque en théorie, on a bien vérifié chaque composante (est un dossier, est une date valide...)?

erreur="$(convert "${uneImage}" -thumbnail '100x100' "${thumbnail}" 2>&1 1>/dev/null)"  && echo "OK" || echo "KO"

Les vérifications ne sont pas suffisantes. Elles consistent uniquement à vérifier que l'on peut écrire dans le dossier mais cela n'implique pas que le droit de lecture du fichier "image" ou encore qu'il y ait suffisamment d'espace disque pour créer la vignette.

Ok j'y avais pas pensé. C'est vrai que vu sous cet angle...

Totor a écrit :
Levi59 a écrit :

je viens de voir mais le format de la date c'est aaaammjj (Cf EOF)

cf Enoncé.txt

http://www.cijoint.fr/cj201012/cijSRxcr7m.txt a écrit :

- Une date au format aammjj

Autant pour moi, j'avais mal lu. roll

Hors ligne