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

Posté par  .
Étiquettes : aucune
0
22
jan.
2007
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!)
  • # Erreur de débutant

    Posté par  . É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  . Évalué à 1.

      tu cherchais les espaces pour les remplacer par ?
      s / ton espace / le symbole ? / g
      • [^] # Re: Erreur de débutant

        Posté par  . É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  . É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  (site web personnel) . É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)
            • [^] # Re: Erreur de débutant

              Posté par  . É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.

Suivre le flux des commentaires

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