View previous topic :: View next topic |
Author |
Message |
driden91 Apprentice
Joined: 26 Jul 2004 Posts: 232 Location: paris
|
Posted: Wed Aug 25, 2004 7:08 am Post subject: [ bash] besoin de conseil pour un script (non résolu) |
|
|
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 |
|
|
guilc Bodhisattva
Joined: 15 Nov 2003 Posts: 3326 Location: Paris - France
|
|
Back to top |
|
|
TiFooN n00b
Joined: 26 Nov 2003 Posts: 71 Location: Huy, Belgium
|
Posted: Wed Aug 25, 2004 8:20 am Post subject: Re: [ bash] besoin de conseil pour un script (non résolu) |
|
|
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 |
|
|
driden91 Apprentice
Joined: 26 Jul 2004 Posts: 232 Location: paris
|
Posted: Wed Aug 25, 2004 8:28 am Post subject: |
|
|
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 |
|
|
TiFooN n00b
Joined: 26 Nov 2003 Posts: 71 Location: Huy, Belgium
|
Posted: Wed Aug 25, 2004 8:39 am Post subject: |
|
|
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 |
|
|
Darkael Veteran
Joined: 10 Aug 2004 Posts: 1321 Location: France
|
Posted: Wed Aug 25, 2004 8:47 am Post subject: |
|
|
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 |
|
|
driden91 Apprentice
Joined: 26 Jul 2004 Posts: 232 Location: paris
|
Posted: Wed Aug 25, 2004 8:52 am Post subject: |
|
|
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 |
|
|
driden91 Apprentice
Joined: 26 Jul 2004 Posts: 232 Location: paris
|
Posted: Wed Aug 25, 2004 8:53 am Post subject: |
|
|
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 |
|
|
sireyessire Advocate
Joined: 20 Mar 2003 Posts: 2991 Location: back in Paris, France
|
Posted: Wed Aug 25, 2004 10:54 am Post subject: |
|
|
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 _________________ I never think of the future. It comes soon enough.
Albert Einstein
Try simpler first
Shockley |
|
Back to top |
|
|
driden91 Apprentice
Joined: 26 Jul 2004 Posts: 232 Location: paris
|
Posted: Wed Aug 25, 2004 11:10 am Post subject: |
|
|
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 |
|
|
guitou Guru
Joined: 02 Oct 2003 Posts: 534 Location: France
|
Posted: Wed Aug 25, 2004 11:47 am Post subject: |
|
|
Tu peux simplement comparer les sommes MD5 de ton fichier ISO et /dev/ton_graveur...
@++ |
|
Back to top |
|
|
driden91 Apprentice
Joined: 26 Jul 2004 Posts: 232 Location: paris
|
Posted: Wed Aug 25, 2004 2:55 pm Post subject: |
|
|
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 |
|
|
driden91 Apprentice
Joined: 26 Jul 2004 Posts: 232 Location: paris
|
Posted: Fri Aug 27, 2004 1:04 pm Post subject: |
|
|
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 |
|
|
lithium Apprentice
Joined: 03 Nov 2002 Posts: 208 Location: Lyon, France
|
Posted: Fri Aug 27, 2004 1:27 pm Post subject: |
|
|
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 |
|
|
br0mGreV Apprentice
Joined: 28 Jul 2004 Posts: 265 Location: Paris, France
|
Posted: Fri Aug 27, 2004 1:49 pm Post subject: |
|
|
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 |
|
|
lithium Apprentice
Joined: 03 Nov 2002 Posts: 208 Location: Lyon, France
|
Posted: Fri Aug 27, 2004 1:57 pm Post subject: |
|
|
non, elle est sympa ta correction, merci |
|
Back to top |
|
|
|