Pages : 1
#1 Le 09/01/2008, à 18:37
- Ghost33
Script bash et "goto"
Bonjour
Bon voila, je souhaiterais écrire un script bash pour la convertion de fichiers son.
Je commence juste, c'est mon premier script...
Lorsque je m'étais amusé à faire un peu de basic, j'avais une fonction "goto", ce qui me permettais, en fonction d'une réponse, d'aller vers un endroit du script ou à un autre, une sorte de saut conditionné.
J'ai cherché sur le net, j'ai trouvé quelques tutos, mais je n'ai pas trouvé cette fonction.
Pourriez-vous m'en dire plus ?
Ma musique ici => https://nicolas-merle.bandcamp.com/
Hors ligne
#2 Le 09/01/2008, à 18:45
- Ghost33
Re : Script bash et "goto"
hum, bon je viens de trouver plusieurs fils de discution indiquant que l'équivalent du "goto" n'existe pas
Ma musique ici => https://nicolas-merle.bandcamp.com/
Hors ligne
#3 Le 09/01/2008, à 18:48
- freebird
Re : Script bash et "goto"
Le goto est une instruction que n'existe pas en bash. En bash on utilise plus généralement l'instruction if then else.
Le if permettant de faire le test.
Le then permettant de faire des opérations si ton test est vrai.
Le else permettant de faire des opérations si ton test est faux. Le else est optionnel.
Un petit tuto utile : http://abs.traduc.org/abs-5.0-fr/ch07.html
Dernière modification par freebird (Le 09/01/2008, à 18:50)
Hors ligne
#4 Le 09/01/2008, à 18:58
- Ghost33
Re : Script bash et "goto"
bon voila en fait pourquoi j'aurais bien eu l'équivalent d'une fonction "goto"...
Voici une premiére ébauche de mon script :
#!/bin/bash
#conversion des fichiers son
echo "conversion des fichiers son"
echo "Faites votre choix :"
echo "[1] Ogg => Mp3"
echo "[2] Mp3 => Ogg"
echo "[3] wav => Mp3"
echo "[4] Wav => Ogg"
echo "[5] Wma => Mp3"
read choix
#ogg=>mp3
if [ &choix=1 ]; then
echo "installer les paquets lame et vorbis-tools ?"
echo "o ou n ?"
read choix1
if [ &choix1=o ]; then
echo sudo apt-get install lame vorbis-tools
else
mkdir mp3; for i in *.ogg; do new_name=`echo "$i" | sed s/.ogg/.mp3/g`; ogg123 -d wav -f - "$i" | lame -h - > mp3/"$new_name"; done
#mp3=>ogg
elif [ &choix=2 ]
then
echo "installer les paquets mpg123 et vorbis-tools ?"
echo "o ou n ?"
read choix2
if [ &choix2=o ]; then
sudo apt-get install mpg123 vorbis-tools
else
mkdir ogg; for i in *.mp3; do new_name=`echo "$i" | sed s/.mp3/.ogg/g`; mpg123 -b 10000 -s "$i" | sox -t raw -r 44100 -s -w -c2 - ogg/temp.wav; oggenc ogg/temp.wav -o ogg/"$new_name"; done; rm -f ogg/temp.wav
#wav=>mp3
elif [ &choix=3 ]
then
echo "installer le paquet lame ?"
echo "o ou n ?"
read choix3
if [ &choix3=o ]; then
sudo apt-get install lame
else
mkdir mp3; for i in *.wav; do new_name=`echo "$i" | sed s/.wav/.mp3/g`; lame --abr 160 "$i" "new_name" ; done
#wav=>ogg
elif [ &choix=4 ]
then
echo "installer le paquet voris-tools ?"
echo "o ou n ?"
read choix4
if [ &choix4=o ]; then
sudo apt-get install vorbis-tools
else
for i in *.wav; do oggenc -q 6 $i ; done
#wma=>mp3
elif [ &choix=5 ]
then
echo "installer les paquets lame et mplayer ?"
echo "o ou n ?"
read choix5
if [ &choix5=o ]; then
sudo apt-get install lame mplayer
else
mkdir mp3 ;for i in *.wma ; do mplayer -vo null -vc dummy -af resample=44100 -ao pcm:waveheader "$i" && lame -m j -h --vbr-new -b 192 audiodump.wav -o "`basename "$i" .wma`.mp3"; done; rm -f audiodump.wav ; mv *.mp3 mp3/
J'ai peur que ce soit trop le fouilli dans mes "conditions", je me demande daileur si le bash est bien approprié à ce que je veux faire :s
Ma musique ici => https://nicolas-merle.bandcamp.com/
Hors ligne
#5 Le 09/01/2008, à 19:16
- Sysko le prospecteur
Re : Script bash et "goto"
et bien tu utilise
les switch case
n'ayant plus la sintaxe exacte de la commande en bash en tête je ne m'avancerais pas si comment l'écrire mais le principe reste le même
le switch regarde la valeurs d'une variable et toi tu lui dit
dans le cas ou la variable vaut x faire ....
dans le cas ou la varaible vaut y faire ....
etc...
dans le cas ou la variable ne vaut pas un des valeurs marqué au dessus faire ....
après en tapant script bash dans google tu arriver à trouver de très bon tuto sur le scripting bash , beaucoup sont en Anglais cependant
Projet tatoeba : projet collaboratif visant à créer un corpus de phrases d'exemples traduites dans le plus de langues possibles
Hors ligne
#6 Le 09/01/2008, à 19:21
- freebird
Re : Script bash et "goto"
Quelques conseils pour ton code :
- utilise la commande case au lieu de ta série if elif
- découpe chaque conversion en fonction
- indente ton code et revient à la ligne
Au final tu aurais 5 fonctions de conversion et un code principal qui donnerait un truc comme ça :
#!/bin/bash
#conversion des fichiers son
#ogg=>mp3
ogg_to_mp3()
{
echo "installer les paquets lame et vorbis-tools ?"
echo "o ou n ?"
read choix1
if [ &choix1=o ]; then
echo sudo apt-get install lame vorbis-tools
fi
mkdir mp3
for i in *.ogg; do
new_name=`echo "$i" | sed s/.ogg/.mp3/g`
ogg123 -d wav -f - "$i" | lame -h - > mp3/"$new_name"
done
}
#mp3=>ogg
mp3_to_ogg()
{
...
}
#wav=>mp3
wav_to_mp3()
{
...
}
#wav=>ogg
wav_to_ogg()
{
...
}
#wma=>mp3
wma_to_mp3()
{
...
}
#Main
echo "conversion des fichiers son"
echo "Faites votre choix :"
echo "[1] Ogg => Mp3"
echo "[2] Mp3 => Ogg"
echo "[3] wav => Mp3"
echo "[4] Wav => Ogg"
echo "[5] Wma => Mp3"
read choix
case $choix in
1) ogg_to_mp3;;
2) mp3_to_ogg;;
3) wav_to_mp3;;
4) wav_to_ogg;;
5) wma_to_mp3;;
esac
Un autre petit commentaire mais cette fois sur le fonctionnement. Si tu comptes utiliser souvent ton script ça va te saouler de répondre non à l'installation de paquet car tu l'auras déjà fais donc vérifie qu'ils ne soient pas déjà installés.
Edit : un petit ajout, voici un tuto d'Initiation à Bash qui pourrait te servir pour partir sur de bonnes bases
Dernière modification par freebird (Le 09/01/2008, à 19:28)
Hors ligne
#7 Le 09/01/2008, à 19:47
- Ghost33
Re : Script bash et "goto"
Ok merci, donc si je comprend bien, on peut enfermer plusieur commandes avec des { et des }...
Merci je vais m'en inspirer.
En ce qui concerne l'installation de paquets... j'sais pas tu dois avoir raison.
Ma musique ici => https://nicolas-merle.bandcamp.com/
Hors ligne
#8 Le 09/01/2008, à 20:02
- Ghost33
Re : Script bash et "goto"
Bon voila ce que ça donne, ça semble fonctionner :
#!/bin/bash
#conversion des fichiers son
ogg_en_mp3()
{
#ogg=>mp3
mkdir mp3; for i in *.ogg; do new_name=`echo "$i" | sed s/.ogg/.mp3/g`; ogg123 -d wav -f - "$i" | lame -h - > mp3/"$new_name"; done
}
mp3_en_ogg()
{
#mp3=>ogg
mkdir ogg; for i in *.mp3; do new_name=`echo "$i" | sed s/.mp3/.ogg/g`; mpg123 -b 10000 -s "$i" | sox -t raw -r 44100 -s -w -c2 - ogg/temp.wav; oggenc ogg/temp.wav -o ogg/"$new_name"; done; rm -f ogg/temp.wav
}
wav_en_mp3()
{
#wav=>mp3
mkdir mp3; for i in *.wav; do new_name=`echo "$i" | sed s/.wav/.mp3/g`; lame --abr 160 "$i" "new_name" ;
done
}
wav_en_ogg()
{
#wav=>ogg
for i in *.wav; do oggenc -q 6 $i ; done
}
wma_en_mp3()
{
#wma=>mp3
mkdir mp3 ;for i in *.wma ; do mplayer -vo null -vc dummy -af resample=44100 -ao pcm:waveheader "$i" && lame -m j -h --vbr-new -b 192 audiodump.wav -o "`basename "$i" .wma`.mp3"; done; rm -f audiodump.wav ; mv *.mp3 mp3/
}
install()
{
echo "installation des paquets lame, mpg123, vorbis-tools, mplayer"
sudo apt-get install lame mplayer vorbis-tools mpg123
}
#Main
echo "conversion des fichiers son"
echo "Faites votre choix :"
echo "[1] Ogg => Mp3"
echo "[2] Mp3 => Ogg"
echo "[3] wav => Mp3"
echo "[4] Wav => Ogg"
echo "[5] Wma => Mp3"
echo "[6] installer les paquets necessaires"
read choix
case $choix in
1) ogg_en_mp3;;
2) mp3_en_ogg;;
3) wav_en_mp3;;
4) wav_en_ogg;;
5) wma_en_mp3;;
6) install;;
esac
edit, j'ai modifié un peu
Dernière modification par Ghost33 (Le 09/01/2008, à 20:11)
Ma musique ici => https://nicolas-merle.bandcamp.com/
Hors ligne
#9 Le 09/01/2008, à 20:14
- Ghost33
Re : Script bash et "goto"
trop bien en tout cas, j'ai mis mon script dans /usr/bin, je l'ai rendu exécutable et je commence à l'utiliser... ça me permet de moins galérer !
edit : par contre ça ne garde pas les tags
Dernière modification par Ghost33 (Le 09/01/2008, à 20:34)
Ma musique ici => https://nicolas-merle.bandcamp.com/
Hors ligne
Pages : 1