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 16/03/2014, à 13:47

alfirdaous

[RESOLU]Script bash: Loop

Bonjour,

Je veux supprimer les informations de quelques fichier mp3 en utilisant eyed3, les fichier sont comme suite: 001, 002, 003,...:

#!/bin/bash
read -p "Please enter a starting number to delete lyrics? : " Start
read -p "Please enter a ending number to delete lyrics? : " EnD

for i in {$Start..$EnD}
do
/usr/bin/python /usr/bin/eyeD3 --remove-lyrics --remove-all $i.mp3
echo "Lyrics has been deleted successfully"
done

Resultat:

File Not Found: {1..5}.mp3

Merci d'avance

Dernière modification par alfirdaous (Le 06/04/2014, à 09:36)

Hors ligne

#2 Le 16/03/2014, à 14:04

Watael

Re : [RESOLU]Script bash: Loop

salut,

la substitution des variables intervient après celle des accolades.
il faut passer par une évaluation arithmétique:

for ((i=Start; i<=EnD; i++)); do :...; done

Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne

#3 Le 16/03/2014, à 14:10

pingouinux

Re : [RESOLU]Script bash: Loop

Bonjour,
Autre méthode :

for i in $(seq $START $END); do echo $i; done

Hors ligne

#4 Le 16/03/2014, à 14:28

casperfr

Re : [RESOLU]Script bash: Loop

Bonjour,
il y a peut être aussi un problème de 0 non significatif,

for ((i=Start; i<=$EnD; i++));
do
 if [[ $i -lt 10 ]]
  then
        j="00$i"
 fi
 if [[ $i -lt 100 ]] && [[ $i -gt 10 ]]
  then
        j="0$i"
 fi
 if [[ $i -gt 100 ]]
  then
        j="$i"
 fi
/usr/bin/python /usr/bin/eyeD3 --remove-lyrics --remove-all "$j.mp3"
done

Hors ligne

#5 Le 16/03/2014, à 14:34

pingouinux

Re : [RESOLU]Script bash: Loop

@casperfr :
Il y a plus simple :

j=$(printf "%03d" $i)

Hors ligne

#6 Le 16/03/2014, à 14:36

casperfr

Re : [RESOLU]Script bash: Loop

@pingouinux

Merci,
je suis vraiment novice en bash (et linux en générale)
je ne fais que les choses que je comprends pour évité au maximum les erreurs,
mais avec l'aide des personnes qui maitrisent , j'aprend beaucoup plus vite,

Merci

Dernière modification par casperfr (Le 16/03/2014, à 14:37)

Hors ligne

#7 Le 16/03/2014, à 14:48

pingouinux

Re : [RESOLU]Script bash: Loop

D'ailleurs, ta succession de if ne marchait pas lorsque i valait 10 ou 100. Tu aurais pu faire ceci :

 if [[ $i -lt 10 ]]
 then
    j="00$i"
 elif [[ $i -lt 100 ]]
 then
    j="0$i"
 else
    j="$i"
 fi

Hors ligne

#8 Le 16/03/2014, à 15:52

Watael

Re : [RESOLU]Script bash: Loop

pingouinux a écrit :

Il y a plus simple :

j=$(printf "%03d" $i)

il y a encore plus simple

printf -v i '%03d' $i

sans passer par une variable intermédiaire.


Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne

#9 Le 17/03/2014, à 06:46

pingouinux

Re : [RESOLU]Script bash: Loop

Merci pour ce petit rappel.

Hors ligne

#10 Le 17/03/2014, à 12:03

alfirdaous

Re : [RESOLU]Script bash: Loop

@Watael + @pingouinux: ca va imprimer par exemple: 1 2 3 et ne pas 001 002 003

@casperfr: le code est correct, mais trop long, par contre la proposition de pingouinux est correcte

en fin de compte je presume par:

#!/bin/bash

read -p "Please enter a starting number to delete lyrics? : " start
read -p "Please enter a ending number to delete lyrics? : " end

for(( i=start; i<=end; i++ ))
do
  printf -v f '%03d.mp3' $i
  /usr/bin/python /usr/bin/eyeD3 --remove-lyrics --remove-all "$f"
done

Hors ligne