Retourner aux forums || Retourner au forum Programmation.shell

Programmation.shell : Problèmes de chemin et truc qui va pas avec if elif fi

Posté par hdiamant () le 22 janvier 2007
0
Bonjour à tous, Voilà, je rame un peu dans la rédaction de mon premier script : c pas tout rose ! Premier problème : le script fonctionne dans un terminal, si je l'applique à un fichier situé dans le répertoire courant. Si je démarre le script en sélectionnant un fichier (clic droit + script nautilus) le script s'exécute mais le 'mv' ne fonctionne pas. WHY ? Voici le script :
# Récupérer le nom du fichier sélectionné et son extension
	name=`echo "$1" | cut -d"." -f1`
	extend=`echo "$1" | cut -d"." -f2`
	file0=`echo "$name.$extend" | sed 's/ /\?/g'`
	file1=`zenity --entry --title="Renommer le fichier?" --text="Renommez le fichier "$1", s'il vous plaît" --entry-text="$file0"| sed 's/ /\-/g'`
	mv "$file0" "$file1.$extend"
Deuxième problème :
# Récupération de la durée du fichier.
	if [ "$extend"="mp3" ] ; then	
		MM=`mp3info -x $file0 | grep Length | cut -d ":" -f2`
		SS=`mp3info -x $file0 | grep Length | cut -d ":" -f3`
	elif [ "$extend"="ogg" ] ; then
		MM=`ogginfo $file0 | grep Playback | cut -d " " -f3 | cut -d "." -f1`
	else	
		zenity --info --title="Erreur" --text="Le fichier n'est pas conforme." ; exit	
	fi
	zenity --info --title "Résultat" --text "Durée du fichier : $MM m $SS s." 
Je dois récupérer la durée de fichier audio. Mon problème c'est que pris séparément ces instructions fonctionnent mais là, dans le script, rien ! Je ne crois pas que ce soit le même problème de chemin puisque ça fonctionne si je commente toutes les instructions et ne retiens que, par exemple, le cas du mp3, appliqué à un fichier mp3. (Je sais, faut pas être désespéré, mais quand même, au secours!)

> Lire le message (6 commentaires, moyenne: 1,2).  

Cette discussion est archivée, il n'est plus possible de laisser des commentaires.

Note : les commentaires appartiennent à ceux qui les ont postés. Nous n'en sommes pas responsables.

Erreur de débutant

Posté par hdiamant () le 22/01/2007 à 22:37. (lien). Évalué à 1.

Oups, le problème numéro 1 vient d'être réglé avec la suppression de l'expression

sed 's/ /\?/g'

dans la 3ème ligne !

Par contre, j'ai encore besoin d'aide pour le problème numéro 2 demeure !

(à vrai dire, je n'ai pas tout à fait compris pourquoi ça ne marchait pas avec sed dans mon problème 1, si quelqu'un peux m'expliquer !)

Merci d'avance !

  • [^]Re: Erreur de débutant

    Posté par NeoX () le 22/01/2007 à 22:41. (lien). Évalué à 1.

    tu cherchais les espaces pour les remplacer par ?
    s / ton espace / le symbole ? / g

    --
    Apprendre par les autres, c'est bien.
    Apprendre par soi-meme (RTFM, man, et notre ami google) c'est mieux
    • [^]Re: Erreur de débutant

      Posté par hdiamant () le 22/01/2007 à 23:08. (lien). Évalué à 1.

      Oui, c'est curieux, maintenant que j'y pense, c'est tout à fait dénué d'intérêt. Il me semblait que sans cela ça bloquait ailleurs mais après maints essais, non.
      C'était un morceau de code réellement inutile.

      Pour mon deuxième problème, j'ai corrigé la dernière ligne (signe = manquant après --text) mais cela ne change rien.

      Ai-je manqué quelque chose dans la logique du if ?

      • [^]Re: Erreur de débutant

        Posté par hdiamant () le 22/01/2007 à 23:40. (lien). Évalué à 1.

        Alors en reprenant tout à zéro, dans un fichier tout propre, ben, ça a marché, sans que je sâche vraiment pourquoi.

        Je mets ici le code qui me renvoie les minutes et les secondes des fichiers mp3 ou ogg que j'utilise.

        # Récupération de la durée du fichier.

        if
        [ "$extend" = "mp3" ] ; then
        MM=`mp3info -x "$file0" | grep Length | cut -d ":" -f2`
        SS=`mp3info -x "$file0" | grep Length | cut -d ":" -f3`
        elif
        [ "$extend" = "ogg" ] ; then
        MM=`ogginfo "$1" | grep Playback | cut -d " " -f3 | cut -d "m" -f1`
        SS=`ogginfo "$1" | grep Playback | cut -d " " -f3 | cut -d ":" -f2 | cut -d "." -f1`
        else
        zenity --info --title="Erreur" --text="Le fichier n'est pas conforme."
        fi

        zenity --info --title "Résultat" --text="Durée du fichier : $MM m et $SS s."

        cp "$1" "$groupfile-$file1.$extend-CQ"

        Au passage, que pensez-vous de ma manière de récupérer les minutes et secondes? Elle me paraît peu élégante mais je crois qu'elle fonctionne (pour le moment) et qu'elle me permettra d'envoyer facilement ces données vers une base mysql.

        Dites-moi si je me trompe !

        • [^]Re: Erreur de débutant

          Posté par -=[ Benoit Plessis ]=- (page perso, ) le 23/01/2007 à 11:38. (lien). Évalué à 2.

          Je ferais une remarque rapide sur les extensions:
          Sous linux elles n'existent que pour l'utilisateur ou presque.
          utilise plutot la commande 'file' pour savoir ce que contiennent tes fichiers.
          et fait attention, si l'argument fourni a ton script est un chemin de fichier complet
          dont un dossier contient un point, un chemin relatif (eg ../file.mp3) ou même
          plus simplement si ton fichier contient plusieurs point (toto.tata.mp3) bein ton script ne marchera pas (du moins pas comme tu l'attend)

          --
          Il [e2fsck] a bien démarré, mais il m'a rendu la main aussitot en me disant "houlala, c'est pas beau à voir votre truc, je préfèrerai que vous teniez vous même la tronçonneuse" (traduction libre)
          • [^]Re: Erreur de débutant

            Posté par hdiamant () le 23/01/2007 à 11:56. (lien). Évalué à 1.

            Merci pour tes conseils mais je n'ai pas réussi à comprendre comment obtenir cette info avec la commande file. Je reste ouvert à d'autres solutions donc.

            Par contre j'ai un souci avec les paths. Je n'y comprends rien. Si quelqu'un avait la gentillesse de m'en dire plus sur par exemple : $NAUTILUS_SCRIPT_SELECTED_FILE_PATHS et surtout sur la manière dont je peux trouver le path du fichier sélectionné ! Car c'est là que coince mon script maintenant.

Revenir en haut de page || Retourner aux forums || Retourner au forum Programmation.shell