Script shell bash

Fermé
kreuk801 Messages postés 22 Date d'inscription dimanche 14 février 2010 Statut Membre Dernière intervention 4 janvier 2015 - 2 janv. 2011 à 18:28
mamiemando Messages postés 33381 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 26 novembre 2024 - 2 janv. 2011 à 21:34
Bonjour,
Voila un travail que j'ai a rendre demain , et je solicite votre aide :

Enoncé :
Utilitaire de création d'images miniatures

1. Travail à faire

Ecrire un script-shell référencé imagette qui admet en argument :

* un nom de répertoire
* une date au format aammjj

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érieure à celle passée en second
argument, une imagette (thumbnail) au format « point png » et de taille lOOx 100 pixels.
Ces imagettes sont placées dans un nouveau répertoire référencé miniatures et créé dans le
répertoire passé en premier argument.

4. Contraintes

On programmera dans « l'esprit Unix ». On n'oubliera donc pas de tester :

-Le nombre d'argument
-L'existence 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 argument

Le code de retour renvoyé sera :

- égal à 1 en cas de problème d'argument
-égal à 2 en cas de problème d'existence ou de type du fichier passé en argument
-égal à 3 en cas de problème de droit d'écriture
-égal à 4 en cas de problème de format de date

conforme à l'esprit Unix si tout va bien 


Et voila le script que j'ai deja fait :


#!/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 4
    else
    echo "ok"
fi

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



# Derniere modification

for all in $1
    if 
        then
            do
                echo "$(stat -c %X )"
                done
                exit 0    
            done
        else
            exit 0

# Vérifier droits répertoire

if test -d $1 && test -w $1 
    then
        echo "$1 droits ok"
    else 
        echo "$1 droits non ok"
        exit 3
fi

for $1 in 'ls  *.jpg *.jpeg *.JPEG'
do
	convert ( ls $1 ) -thumbnail '100x100>' miniatures/$image
	
done


Si quelqu'un peut me le corriger , et me dire se que je peux ajouter se serais simpas , merci d'avances pour votre aide .
A voir également:

1 réponse

mamiemando Messages postés 33381 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 26 novembre 2024 7 802
2 janv. 2011 à 21:34
Il y a de grosses erreurs de syntaxe bash, je pense que tu devrais t'empresser, au choix et selon tes préférences :
- d'installer linux en dual boot (si tu es sous windows)
- d'installer cygwin
- d'installer un logiciel comme virtualbox dans lequel tu installeras linux

Ainsi tu pourras tester ton script.

Il y a notamment des erreurs syntaxiques :

if [ test ] ; then
  ...
fi


Il y également des erreurs algorithmiques. Par exemple : "for all in $1" signifie parcourt chaque mot du premier argument. En conséquence, la variable all va prendre la valeur du premier argument passé au script et la boucle for aura fini ses itérations.

Ce serait plutôt :

for fichier in $(ls -1 $1/*.png)
do
  ...
done


Enfin on ne peut pas sous entendre les début et fin de bloque (fi, do ... done) etc...

Je te conseille d'écrire ton test petit à petit. Tu peux utiliser l'instruction echo pour afficher le contenu d'une variable et voir où passe ton script.

Bon courage
0