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 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 ?

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

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

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 wink

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.

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)

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 sad

Dernière modification par Ghost33 (Le 09/01/2008, à 20:34)

Hors ligne