Pages : 1
#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
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