Gentoo Forums
Gentoo Forums
Gentoo Forums
Quick Search: in
[ bash] besoin de conseil pour un script (non résolu)
View unanswered posts
View posts from last 24 hours

 
Reply to topic    Gentoo Forums Forum Index French
View previous topic :: View next topic  
Author Message
driden91
Apprentice
Apprentice


Joined: 26 Jul 2004
Posts: 232
Location: paris

PostPosted: Wed Aug 25, 2004 7:08 am    Post subject: [ bash] besoin de conseil pour un script (non résolu) Reply with quote

bonjour voila j'ai recuperer un script pour graver. Celui ci créer une image iso, grave et éfface le fichier, mais je dois donc modifier ce script à chaque fois que je veux graver puisque je doit lui indiquer les chemins. Ce que je voudrais faire c'est que quand je lance mon scripts qu'il me demande quel est le repertoire source/repertoire destination/le nom du cd etc... on m'a donc parler de faire des variable $1/$2 .... ou d'utiliser getopts.
Est ce que vous m'expliquez les grande ligne de mon scripts?? comment utiliser c'est variables?? car je ne connait pas du tout le langage bash mais en cherchant sur google j'ai vu qu'il existait des similarités avec le vba/vbe (langage que je connais) et avez des bon tutos expliquant tout cela?????
merci d'avance
_________________
l'ange des tenebres vit la lumiere au fond de la nature humaine....
Back to top
View user's profile Send private message
guilc
Bodhisattva
Bodhisattva


Joined: 15 Nov 2003
Posts: 3326
Location: Paris - France

PostPosted: Wed Aug 25, 2004 8:14 am    Post subject: Reply with quote

Si tu veux commencer, regardes ça : http://www.ac-creteil.fr/reseaux/systemes/linux/shell-scripts/shell-programmation.html
C'est bien fait et ça vaut bien mieux que de longues explications sur le forum ;) Je pense que tu y trouveras tout ce dont tu as besoin
_________________
Merci de respecter les règles du forum.

Mon site perso : https://www.xwing.info
Mon PORTDIR_OVERLAY : https://gentoo.xwing.info ou layman -a xwing
Back to top
View user's profile Send private message
TiFooN
n00b
n00b


Joined: 26 Nov 2003
Posts: 71
Location: Huy, Belgium

PostPosted: Wed Aug 25, 2004 8:20 am    Post subject: Re: [ bash] besoin de conseil pour un script (non résolu) Reply with quote

driden91 wrote:
bonjour voila j'ai recupéré un script pour graver. Celui ci crée une image iso, grave et efface le fichier, mais je dois donc modifier ce script à chaque fois que je veux graver puisque je dois lui indiquer les chemins. Ce que je voudrais faire c'est que quand je lance mon script qu'il me demande quel est le repertoire source/repertoire destination/le nom du cd etc... on m'a donc parlé de faire des variable $1/$2 .... ou d'utiliser getopts.
Pourriez-vous m'expliquer les grandes lignes de mon scripts?? comment utiliser ces variables?? car je ne connait pas du tout le langage bash mais en cherchant sur google j'ai vu qu'il existait des similarités avec le vba/vbe (langage que je connais) et avez des bon tutos expliquant tout cela?????
merci d'avance


Mmmh...
Donne nous ton script, au moins...
Sinon, tu peux toujours aller jetter un coup d'oeil là
http://www.ac-creteil.fr/reseaux/systemes/linux/shell-scripts/shell-programmation.html
_________________
TiFooN
Bien décidé à avoir une machine 100% fonctionnelle...
Back to top
View user's profile Send private message
driden91
Apprentice
Apprentice


Joined: 26 Jul 2004
Posts: 232
Location: paris

PostPosted: Wed Aug 25, 2004 8:28 am    Post subject: Reply with quote

Code:
#!/bin/bash
set -x
dev=`cdrecord --scanbus |grep DVD| awk '{print $1}'`
cd /mnt/hda3/4892
mkisofs -R -r -J -v -V "4892" -o /mnt/hda3/iso2/4892.iso /mnt/hda3/4892/
isovfy /mnt/hda3/iso2/4892.iso
isoinfo -p -i /mnt/hda3/iso2/4892.iso
# Toc pour cdrdao
cat > ../cd.toc << _EOT_
CD_ROM


// Track 1
TRACK MODE1
NO COPY
DATAFILE "/mnt/hda3/iso2/4892.iso"
_EOT_

#cdrdao write -n --speed 48 --device 1,0,0 --driver generic-mmc-raw /var/graveur/cd.toc
cdrecord -v speed=48 dev=ATAPI:1,0,0  /mnt/hda3/iso2/4892.iso

eject /dev/cdroms/cdrom1


voila mon script bon apres mes recherches il faudrait que j'utilise echo en ayant au préalable déclaré mes variables ensuite de faire un read???
_________________
l'ange des tenebres vit la lumiere au fond de la nature humaine....
Back to top
View user's profile Send private message
TiFooN
n00b
n00b


Joined: 26 Nov 2003
Posts: 71
Location: Huy, Belgium

PostPosted: Wed Aug 25, 2004 8:39 am    Post subject: Reply with quote

Ce serait un truc comme ceci :





Code:
!/bin/bash
if [ $# == 2 ]
then
   set -x
   dev=`cdrecord --scanbus |grep DVD| awk '{print $5}'`
   mkisofs -R -r -J -v -V "plok" -o $2.iso $1
   isovfy $2.iso
   isoinfo -p -i $2.iso
   ...

else
   echo "erreur de syntaxe ($0 /repertoire/source /repertoire/destination)
fi

_________________
TiFooN
Bien décidé à avoir une machine 100% fonctionnelle...
Back to top
View user's profile Send private message
Darkael
Veteran
Veteran


Joined: 10 Aug 2004
Posts: 1321
Location: France

PostPosted: Wed Aug 25, 2004 8:47 am    Post subject: Reply with quote

Apparement, d'après ce que tu dis tu voudrais faire un script interactif. Mais à mon avis il serait peut-etre un peu plus simple de lancer le script comme ça:

Code:

script <rep source> <rep dest> <nom CD> ...


Et tu as juste qu'à insérer des $1, $2 et compagnie dans le script existant sans avoir à le modifier.

EDIT: pris de vitesse par le post précédent...
Back to top
View user's profile Send private message
driden91
Apprentice
Apprentice


Joined: 26 Jul 2004
Posts: 232
Location: paris

PostPosted: Wed Aug 25, 2004 8:52 am    Post subject: Reply with quote

KarnEvil wrote:
Apparement, d'après ce que tu dis tu voudrais faire un script interactif. Mais à mon avis il serait peut-etre un peu plus simple de lancer le script comme ça:

Code:

script <rep source> <rep dest> <nom CD> ...


Et tu as juste qu'à insérer des $1, $2 et compagnie dans le script existant sans avoir à le modifier.

EDIT: pris de vitesse par le post précédent...


oui c'est un choix possible et je viens juste de comprendre comment celui ci fonctionnait il faut que j'etudi les possibilités
_________________
l'ange des tenebres vit la lumiere au fond de la nature humaine....
Back to top
View user's profile Send private message
driden91
Apprentice
Apprentice


Joined: 26 Jul 2004
Posts: 232
Location: paris

PostPosted: Wed Aug 25, 2004 8:53 am    Post subject: Reply with quote

au fait merci pour le lien qui est vraiment trés complet merci
_________________
l'ange des tenebres vit la lumiere au fond de la nature humaine....
Back to top
View user's profile Send private message
sireyessire
Advocate
Advocate


Joined: 20 Mar 2003
Posts: 2991
Location: back in Paris, France

PostPosted: Wed Aug 25, 2004 10:54 am    Post subject: Reply with quote

moi je fais ça avec un Makefile, ça marche pas mal:
Code:
make cdrom-iso target="file1 dir1/file2

Code:

cdrom-iso:buffer.iso
        cdrecord -v speed=16 -dev=ATAPI:0,0,0 buffer.iso;

multicdrom-iso:buffer.iso
        cdrecord -v -multi speed=16 -dev=ATAPI:0,0,0 buffer.iso;

buffer.iso:
        make clean;\
        mkisofs -R -r -J -o buffer.iso ${target};
burn-iso:
        cdrecord -v speed=16 -dev=ATAPI:0,0,0 ${target};

clean:
        rm -f buffer.iso;

bon si vous tenez absolument à mettre un nom à l'iso il faut rajouter une variable name.
Comme quoi il y a pas que les GUI dans la vie :wink:
_________________
I never think of the future. It comes soon enough.
Albert Einstein

Try simpler first
Shockley
Back to top
View user's profile Send private message
driden91
Apprentice
Apprentice


Joined: 26 Jul 2004
Posts: 232
Location: paris

PostPosted: Wed Aug 25, 2004 11:10 am    Post subject: Reply with quote

bon ba voila mon script aprés ce que vous m'avez conseillez dites moi ce que vous en pensez et comment je pourrais l'ameliorer ...
Code:

#!/bin/bash
if [ $# == 8 ]
then
set -x
echo redirection dans le repertoire : $1
echo nom du cd : $2
echo chemin de destination : $3
echo chemin de la source : $4
echo verification de l'ISO : $5
echo info sur l'ISO : $6
echo DATAFILE : $7
echo chemin du fichier à graver : $8
dev=`cdrecord --scanbus |grep DVD| awk '{print $1}'`
cd $1

mkisofs -R -r -J -v -V "$2" -o $3 $4
isovfy $5
isoinfo -p -i $6
# Toc pour cdrdao
cat > ../cd.toc << _EOT_
CD_ROM


// Track 1
TRACK MODE1
NO COPY
DATAFILE "$7"
_EOT_

#cdrdao write -n --speed 48 --device 1,0,0 --driver generic-mmc-raw /var/graveur/cd.toc
cdrecord -v speed=48 dev=ATAPI:1,0,0  $8

else
   echo erreur de syntaxe
fi

eject /dev/cdroms/cdrom1


sinan avec quelle commande je peut inserer dans mon script pour comparer si les fichiers du cd sont les meme que ce du repertoire de source?? en gros je veux verifier que el cd contient exactement les meme fichier que ceux du repertoire source
_________________
l'ange des tenebres vit la lumiere au fond de la nature humaine....
Back to top
View user's profile Send private message
guitou
Guru
Guru


Joined: 02 Oct 2003
Posts: 534
Location: France

PostPosted: Wed Aug 25, 2004 11:47 am    Post subject: Reply with quote

Tu peux simplement comparer les sommes MD5 de ton fichier ISO et /dev/ton_graveur...
@++
Back to top
View user's profile Send private message
driden91
Apprentice
Apprentice


Joined: 26 Jul 2004
Posts: 232
Location: paris

PostPosted: Wed Aug 25, 2004 2:55 pm    Post subject: Reply with quote

guitou wrote:
Tu peux simplement comparer les sommes MD5 de ton fichier ISO et /dev/ton_graveur...
@++


comment je fait pour comparer les somme?
_________________
l'ange des tenebres vit la lumiere au fond de la nature humaine....
Back to top
View user's profile Send private message
driden91
Apprentice
Apprentice


Joined: 26 Jul 2004
Posts: 232
Location: paris

PostPosted: Fri Aug 27, 2004 1:04 pm    Post subject: Reply with quote

bon ba voila j'ai fini mon script hier, désolé de pas l'avoir mis sur le forum avant!

Code:
 #!/bin/bash

set -x
umount /mnt/réseaux
echo chemin de base sur le réseaux : $1
echo chemin du repertoire à archiver : $2
echo creation du fichier : $3

mount -t smbfs $1 /mnt/réseaux -o username=****,worgroup=****
#$1 correspont au point de montage de base ****

cd $2
# se placer sur le repertoire final   *****

mkdir $3
#$3 creation du repertoire ou les fichiers vons être copiés /mnt/hda3/4892/

cp -a * "$3"
#$3 bis copie des fichiers dans le repertoire du DD

echo copie des fichiers à archiver dans le repertoire : $3



if [ $# == 6 ]
then
set -x

echo chemin du fichier à graver : $3
dev=`cdrecord --scanbus |grep DVD| awk '{print $1}'`
cd $3
echo redirection dans le repertoire : $3
tree . > $4.txt
mkisofs -R -r -J -v -V "$4" -o $5 $3
echo nom du cd : $4
echo chemin de destination : $5
echo chemin de la source : $3

isovfy $5
echo verification de l'ISO : $5

isoinfo -p -i $5
echo info sur l'ISO : $5




# Toc pour cdrdao
cat > ../cd.toc << _EOT_
CD_ROM


// Track 1
TRACK MODE1
NO COPY
DATAFILE "$5"
_EOT_
echo DATAFILE : $5
#cdrdao write -n --speed 48 --device 1,0,0 --driver generic-mmc-raw /var/graveur/cd.toc
cdrecord -v speed=48 dev=ATAPI:1,0,0  $5
eject /dev/cdroms/cdrom1
echo GRAVURE TERMINE AVEC SUCCES

set -x
i=1
until [ $i = $6 ]
do
cdrdao unlock --driver generic-mmc  --device ATAPI:1,0,0
read -r -p " Mettre un CD Vierge et frapper un touche pour continuer..." -n 1
eject -t /dev/cdroms/cdrom1
# Toc pour cdrdao
cat > ../cd.toc << _EOT_
CD_ROM
// Track 1
TRACK MODE1
NO COPY
DATAFILE "$5"
_EOT_
echo DATAFILE : $5
#cdrdao write -n --speed 48 --device 1,0,0 --driver generic-mmc-raw /var/graveur/cd.toc
cdrecord -v speed=48 dev=ATAPI:1,0,0  $5
eject /dev/cdroms/cdrom1
let 'i=i+1'
done

GRAVURE TERMINE AVEC SUCCES!!!!
else
   echo erreur de syntaxe
fi

eject /dev/cdroms/cdrom1

_________________
l'ange des tenebres vit la lumiere au fond de la nature humaine....
Back to top
View user's profile Send private message
lithium
Apprentice
Apprentice


Joined: 03 Nov 2002
Posts: 208
Location: Lyon, France

PostPosted: Fri Aug 27, 2004 1:27 pm    Post subject: Reply with quote

Un exemple de méthode simple pour interprété les paramètres :
Code:
#!/bin/bash
# options --truc trucmuche --bidule machine
for i in $@; do
   case $1 in
      --truc)
         echo "la valeur de --truc est $2"
      ;;
      --bidule)
         echo "la valeur de --bidule est $2"
      ;;
   esac
   shift
done


résultat :
Code:
./test.sh --truc muche --bidule machin
la valeur de --truc est muche
la valeur de --bidule est machin
Back to top
View user's profile Send private message
br0mGreV
Apprentice
Apprentice


Joined: 28 Jul 2004
Posts: 265
Location: Paris, France

PostPosted: Fri Aug 27, 2004 1:49 pm    Post subject: Reply with quote

lithium wrote:
Un exemple de méthode simple pour interprété les paramètres :


Il ne manque pas un shift a ton script ?
en effet, tu jartes un argument avec ton premier shift, d'où la suppresion de --truc
avant d'entrer dans ta boucle == [ --truc ; muche ; --bidule ; machin ]
apres un premier tour de boucle == [ muche ; --bidule ; machin ]

d'ou le script passe (pas de reconnaissance de muche dans le esac)
et donc apres un deuxieme tour de boucle == [ --bidule ; machin ]
et encore une fois reconnaissance, et non reconnaissance.

Mais ce serait plus litigieux si on veut que la valeur de ton argument soit entierement générique, et donc qu'entre autre la valeur de --truc puisse etre --bidule aussi. Dans ce cas la, ton script plante.

Donc je rajouterais un deuxieme shift pour eliminer la valeur de ton argument, (si besoin est), dans chacun des cases. et incrementer le pointeur en passant.

ainsi tu fais : moins de tour de boucles, et pis c'ets plus intuitif.


se qui nous donne le petit script suivant :
Code:

#!/bin/bash
# options --truc trucmuche --bidule machine --autre
for i in $@; do
   case $1 in
      --truc)
         echo "la valeur de --truc est $2"
#une valeur utilisé : on la retire
        shift
         incr i
      ;;
      --bidule)
         echo "la valeur de --bidule est $2"
#une valeur utilisé : on la retire
         shift
         incr i
      ;;
      --autre)
#Pas de valeurs, pas de shift.
        echo "L'option --autre est active"
      ;;
   esac
   shift
done


Je l'admet, c'est titiller sur des détails, mais bon.
_________________
Rien n'est éternel, pas même les problèmes...
Back to top
View user's profile Send private message
lithium
Apprentice
Apprentice


Joined: 03 Nov 2002
Posts: 208
Location: Lyon, France

PostPosted: Fri Aug 27, 2004 1:57 pm    Post subject: Reply with quote

non, elle est sympa ta correction, merci :)
Back to top
View user's profile Send private message
Display posts from previous:   
Reply to topic    Gentoo Forums Forum Index French All times are GMT
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum