Ça me paraît bien ça 🙂
Alors, je remplacerais
until [ 1 -eq 2 ]; do par
while true; do ça fait plus propre.
J'ai trouvé la commande magique pour la nième ligne d'un fichier 😛
Et puis, on peut télécharger automatiquement le fichier radios.csv si il n'est pas trouvé.
Ça donne ceci :
#!/bin/bash
# SCRIPT radios.sh
# Utilisation: "./radios.sh [adresse directe du flux radio]"
# Script proposant d'écouter des stations radio via mplayer
# Travail original de Jotenakis, sublimé par Leonux, resublimé par Ludomatic et hacké par Zarer
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
#------------------------------------------------------------------------------#
# Initialisation des variables "utilisateur" #
#------------------------------------------------------------------------------#
DB_FILENAME="radios.csv"; # nom du fichier local par défaut contenant les adresses des radios
DB_URL="http://ludomatic.fr/index.php/dlm/1/6"; # lien vers le fichier public des adresses de stations radio
SCRIPT_PAGEWEB="http://ubunteros.tuxfamily.org/"; # site du projet
SCRIPT_HISTORY="
0.71 (2007-01-31) Balkoth
Légère optimisation du code
Téléchargement automatique du fichier des radios si il n'est pas trouvé
0.70 (2007-01-30) Ludomatic <ludomatic@leonux.net>
Grosse modification structurelle pour cette version 0.7 : séparation
entre la liste des adresses des radios et le 'moteur' de lecture.
Le nom du fichier des radios est 'radios.csv' et sera cherché dans
l'ordre aux emplacements suivants :
- dossier courant du script 'radios.sh'
- dossier de l'utilisateur exécutant le script
0.6d (2007-01-30) Ludomatic <ludomatic@leonux.net>
Ajout de 27 stations (!) grace à Mail1
Merci à Fran pour la découverte de CanalB!
0.6c (2007-01-29) Ludomatic <ludomatic@leonux.net>
Correction de l'adresse du flux OuiFM (merci à Mail1)
Ajout des stations RTL2 et W3 Blues Radio sur proposition de Fran
0.6b- Ludomatic <ludomatic@leonux.net> (22/11/2006)
Correction d'un bug concernant le fond d'écran uni (merci à Léonux et Eupythal)
Ajout de la fonction 'PlusBlancQueBlanc()' qui nettoie tout à la fermeture
0.6 - Ludomatic <ludomatic@leonux.net> (21/11/2006)
Merci à Eupythal pour l'ajout des stations RTL et OuiFM, et ses idées mises en pratique :
> Suppression des messages mplayer lors de la lecture
> Rester dans une 'boucle' pour proposer continuellement les stations
0.5 - Ludomatic <ludomatic@leonux.net> (19/11/2006)
Débugage des affichages colorés,
Optimisation de quelques parties du code,
Nettoyage du code.
0.4 - Zarer <????@gmail.com>
Tests et ajout de stations radio
0.3 - Ludomatic <ludomatic@leonux.net>
Quelques mises en Fonctions et création de Variables grace aux documents suivants :
> http://www.c-sait.net/cours/scripts.php
> http://www.linuxcommand.org/wss0120.php
> http://www.arachnoid.com/linux/shell_programming.html
0.2 - Leonux <leonux@leonux.net>
Refonte du script et publication sur le \"Guide de survie de l'ubuntiste débutant\".
0.1 - Jotenakis
Idée et script original pour Suse Linux.
";
#------------------------------------------------------------------------------#
# Initialisation des variables internes "automatiques" #
#------------------------------------------------------------------------------#
SCRIPT_VERSION=$( echo $SCRIPT_HISTORY | cut -d " " -f1 ); # version courante
SCRIPT_NAME=$( basename $0 ); # nom du script courant
SCRIPT_PATH=$( dirname $0 ); # chemin vers le script courant
MPLAYER_PATH=$( which mplayer ); # emplacement de l'exécutable mplayer
MPLAYER="$MPLAYER_PATH -msglevel all=-1 "; # paramètres à fournir à mplayer
HOME_PATH=$HOME; # dossier de l'utilisateur
#------------------------------------------------------------------------------#
# Tests et paramètres initiaux #
#------------------------------------------------------------------------------#
if [ -z "$MPLAYER_PATH" ]
then
# MPlayer n'est pas installé ou ne peux pas être trouvé : on sort
echo "Vous devez installer le lecteur \"mplayer\" avant de continuer. \n";
echo "";
exit 1;
fi
if [ -n "$1" ]
then
# l'utilisateur a envoyé un paramètre, si il n'est pas reconnu comme une des options alors le considérer comme une adresse à ouvrir ("./radios.sh url_du_flux")
case "$1" in
--help|-h ) # option d'aide
echo "Usage: $SCRIPT_NAME [url du flux radio]";
echo "Ce script permet d'écouter des radios en ligne en ne vous servant que de votre console. MPlayer sera exécuté en tâche de fond.";
echo "La dernière version est disponible depuis le site $SCRIPT_PAGEWEB";
echo "";
echo "$SCRIPT_NAME --help Aide et options disponibles.";
echo "$SCRIPT_NAME Lance le menu de lecture";
echo "$SCRIPT_NAME url_radio Ecoute la radio à l'adresse 'url_radio'";
echo "$SCRIPT_NAME --file nom_fichier Charge la liste du fichier 'nom_fichier'";
echo "$SCRIPT_NAME --version Version courante et l'historique.";
echo "";
exit 1;
;;
--version|-v ) # option de version
echo "$SCRIPT_NAME version $SCRIPT_VERSION :";
echo "$SCRIPT_HISTORY";
echo "Tapez $SCRIPT_NAME --help pour obtenir l'aide complète.";
echo "";
exit 1;
;;
--file|-f ) # paramètre : fichier des adresses radios à charger
PARAM_FILENAME="$2";
;;
* ) # pas une option, considérer comme une url de flux radio et passer à la suite
URL=$1
;;
esac
fi
if [ $PARAM_FILENAME ]
then
# un fichier de flux a été forcé en parametre !
if [ -e "$PARAM_FILENAME" ]
then
# un fichier de flux est fourni en parametre, le charger par défaut
FILE_CSV=$PARAM_FILENAME;
else
# aïe, le fichier demandé n'a été trouvé... on quitte de suite
echo "Le fichier spécifié n'a pas été trouvé!";
echo "Vous pouvez directement spécifier une adresse de radio en paramètre";
echo "ou obtenir une liste prédéfinie à l'adresse suivante :";
echo "$DB_URL";
echo "";
echo "Tapez $SCRIPT_NAME --help pour obtenir l'aide complète.";
echo "";
exit 1;
fi
else
if [ -z $URL ]
then
# pas de fichier en paramètre ni d'url à charger : chercher le fichier dans le dossier courant
if [ -e "$SCRIPT_PATH/$DB_FILENAME" ]
then
# un fichier de flux existe par défaut dans le dossier courant
FILE_CSV="$SCRIPT_PATH/$DB_FILENAME";
else
if [ -e "$HOME_PATH/$DB_FILENAME" ]
then
# un fichier de flux existe par défaut dans le dossier de l'utilisateur
FILE_CSV="$HOME_PATH/$DB_FILENAME";
else
# aucun fichier n'a été trouvé...
echo "Aucune liste de radios n'a été trouvée!";
echo "Une liste de radios par défaut va être téléchargée";
# on télécharge le fichier par défaut
wget -q $DB_URL -O $DB_FILENAME
FILE_CSV="$HOME_PATH/$DB_FILENAME"
echo "OK"
fi
fi
fi
fi
# à ce stade, on dispose d'une URL ($URL) ou d'un fichier d'URLs ($FILE_CSV)
#------------------------------------------------------------------------------#
# Déclaration des Fonctions #
#------------------------------------------------------------------------------#
MrPropre () {
# cette fonction permet de ré-initialiser les couleurs du terminal
tput sgr0; # supprime les couleurs
}
PlusBlancQueBlanc () {
# cette fonction nettoie tout le terminal
MrPropre;
clear;
}
trap "PlusBlancQueBlanc" 0; # commande qui exécute la fonction 'PlusBlancQueBlanc()' lors de la sortie du programme (réception du signal '0')
AfficheStations () {
# cette fonction permet d'afficher la liste des stations
echo -e '\E[36;40m'; # hop, on change de couleur
cat -n $FILE_CSV | cut -d ";" -f1;
MrPropre; # supprime les couleurs
}
#------------------------------------------------------------------------------#
# Affichage de la liste et lecture du choix si une URL n'est pas fournie #
#------------------------------------------------------------------------------#
clear;
echo "Bienvenue sur $SCRIPT_NAME (v$SCRIPT_VERSION), le lecteur de stations radio sur internet via mplayer.";
AfficheStations; # on affiche la liste des stations
while true; do # on boucle
echo -e '\E[37;40m'; # on change de couleur et on efface l'écran pour uniformiser le fond (merci à Leonux pour le screenshot ;)
echo "Faites votre choix, \"q\" pour quitter à tout moment, \"l\" pour afficher la liste :";
echo -e '\E[33;40m'; # on change à nouveau de couleur pour demander d'entrer un choix
echo -en '\nQuelle radio écouter [defaut : 13] ?> ';
read NUMSTATION; # on enregistre le choix saisi
MrPropre; # supprime les couleurs
if [ -z "$NUMSTATION" ]
then
# le choix par défaut est appliqué si la réponse est vide
NUMSTATION="13";
else
case $NUMSTATION in
"q"|"Q" ) break ;; # l'utilisateur a demandé de sortir
"l"|"L" ) AfficheStations ;; # l'utilisateur souhaite voir la liste des stations
* ) nodigits="$(echo $NUMSTATION | sed 's/[[:digit:]]//g')"
if [ -z "$nodigits" ] ; then
if [ -n $FILE_CSV ] # la variable $FILE_CSV n'est pas nulle et on a bien reçu un numéro de ligne
then
# on récupère la ligne correspondant à la station demandée
line=$(sed -n ${NUMSTATION}p $FILE_CSV)
if [ -n "$line" ]
then
# on a un choix valide, on mémorise l'adresse (partie située après le point-virgule)
URL=$( echo $line | cut -d ";" -f2 );
else
# le choix est hors limites !
echo "Veuillez choisir un numéro valide dans la liste (laisser vide pour la radio par défaut)";
fi
fi
else
echo "Veuillez choisir un numéro valide (laisser vide pour la radio par défaut)"; # le choix est invalide !
fi
;;
esac;
fi
if [ -n "$URL" ]; then
echo -e '\E[37;40m'; # oui, on aime les couleurs par ici :)
echo -e "Ouverture du flux de la station radio depuis $URL,\nappuyez sur \"q\" pour interrompre la lecture\npatientez, chargement en cours...\n\n";
# bon, si on arrive à cette ligne c'est que mplayer est installé et que nous disposons d'une adresse considérée comme valide : on le lit ce flux?
$MPLAYER $URL 1>/dev/null 2>/dev/null
MrPropre; # supprime les couleurs
fi
URL="";
done
exit $?; # On quitte avec le code de sortie de la dernière comande (mplayer). That's all folks!
Bon, il faudrait éventuellement demander à l'utilisateur s'il souhaite télécharger la liste de radios, et à quel endroit l'enregistrer. Et puis, étant donné que cette liste commence à devenir conséquente, il faudrait peut être l'afficher sur deux colonnes, ou faire une pause à l'affichage, car on ne voit pas tout d'un coup.
Mais j'ai un peu la flemme 😃
Edit: ah oui, chez moi la radio n°13 (choix par défaut) ne fonctionne pas.