Filtre Médiathèque

Filtre Médiathèque - Shell/Batch - Programmation

Marsh Posté le 02-01-2006 à 01:02:35    

Bonjour,
je débute avec les scripts shell et je dois avouer que je suis vraiment bloqué sur un problème.
Je suis en train d'écrire un script pour faire une "médiathéque" mp3.
En paramètre de ce script on pourra filtrer les fichiers musicaux en fonction des méta-informations qu'ils contiennent.Par exemple,
pour obtenir toutes les chansons de rock ou hard rock etc...,il faudra utiliser un paramètre -f avec la commande suivante genre="rock"|"hard-rock"
ensuite on me demande de faire en sorte qu'on puisse utiliser l'étoile (*) dans les filtres .
 
la 1ere chose que je fais c'est que j'analyse tous les paramètres qu'on passe au script
 

Code :
  1. for ((i=1;i<=$#;i++))
  2. do
  3.   if [ "${!i}" = "-f" ]
  4.   then
  5.    param1=$(($i+1)) #contient le paramètre qui suit -f
  6.    filmedia ${param1} #filmedia est une fonction qui va filtrer la médiathèque
  7.   else echo "parametre non valide"
  8. done


 
mon 1er problème : il faut que je substitue les paramètres à mesure que je m'en sers. En effet le paramètre qui suit -f ne doit pas être traité dans la boucle car sinon il va afficher paramètre non valide.Il faut que je l'envoie dans la fonction filmédia (ça c'est bon) mais ensuite il faut que je le substitue pour pas qu'il soit interprété dans la boucle à la sortie...
 
voici un bout de la fonction filmedia (les autres entrées du case sont construites de la même manière)
 

Code :
  1. function filmedia(){
  2. case "$1" in
  3. "titre="*)
  4. media $racine |cut -f 2 -d ":" | grep
  5. #media $racine renvoie tous les mp3 contenues dans un répertoire sous la forme
  6. #MP3 n° ? : titre : album : artiste : genre : année


Si le parametre $1 commence par "titre=" il faut trier par titre
-->mon 1er probleme est que j'aimerai faire un grep sur le 2eme champ de la sortie media $racine mais sans couper! avec ce sript je ne renvoie que les titres alors que je veux renvoyer toute la ligne...Mais si je ne fais pas de cut il fait un grep sur la ligne, pas sur le 2eme champ de la ligne.
 
-->mon 2eme probleme je ne sais pas comment passer le reste du parametre à grep.Si l'utilisateur marque titre="test" il faut passer grep -w "test"
alors que si il marque titre="test"|"chanson" il faut passer quoi??
c'est bon ça? grep '(\test\|chanson\)'
 
--> et puis vous avez une idée de comment se servir de l'etoile
si l'utilisateur met titre="test*" il faut gérer toute les lignes avec un titre qui commence par test si je fais un  grep test (sans le -w) il va afficher toute les lignes qui contiennent tet pas seulement celles qui commencent par test.
 
 
Je remercie d'avance toute personne pouvant me venir en aide
 :jap:  
Yoshi


Message édité par yoshi42 le 02-01-2006 à 12:31:41
Reply

Marsh Posté le 02-01-2006 à 01:02:35   

Reply

Marsh Posté le 04-01-2006 à 16:58:18    

Renseigne toi sur la fonction getopts qui permet justement de gérer les paramatres que l'ont passe à un script.  
Car là tu est en train d'ecrire une usine à gaz j'ai l'impression  :)


---------------
Du tofu en Alsace : www.tofuhong.com
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed