Bash: problème avec while
LezardMoo
Messages postés
554
Date d'inscription
Statut
Membre
Dernière intervention
-
Utilisateur anonyme -
Utilisateur anonyme -
Bonsoir à tous !!!
voila je suis coincé avec un petit problème,
alors voila, ne sais pas comment remplacer la varibla $n par un nom. c'est en fait une liste de nom dans un fichier
j'ai testé
plusieurs chose ainsi que ca:
mais ca marche pas non plus.
merci d'avance à tous
voila je suis coincé avec un petit problème,
j=1
while [ $j -lt 11 ]
do
mplayer 'head -$j /home/clem/Musique/test3 | tail -1' -vc null -vo null -ao pcm:file=/home/clem/Musique/Diab-Laury/'head -$n/home/clem/Musique/SoundCloud/.soundcloud/nom | tail -1'.wav
alors voila, ne sais pas comment remplacer la varibla $n par un nom. c'est en fait une liste de nom dans un fichier
j'ai testé
plusieurs chose ainsi que ca:
j=1 while [ $j -lt 11 ] do n=0 while [ $n -lt 11 ] do n=$n+1 done mplayer 'head -$j /home/clem/Musique/SoundCloud/.soundcloud/test3 | tail -1' -vc null -vo null -ao pcm:file=/home/clem/Musique/SoundCloud/Diab-Laury/'head -$n /home/clem/Musique/SoundCloud/.soundcloud/nom | tail -1'.wav let j=$j+1 done
mais ca marche pas non plus.
merci d'avance à tous
A voir également:
- Bash: problème avec while
- Bingo bash - Télécharger - Divers Jeux
- Bash list ✓ - Forum Shell
- Bash permission non accordée - Forum Shell
- Bash pause ✓ - Forum Shell
- Bash addition - Forum Programmation
10 réponses
salut,
si tu commançais par exposer ton problème plus clairement, tu aurais, par toi-même peut-être, un début de réponse.
décris plus précisément le problème, avec des échantillons de tes fichiers.
ce que tu as
ce que tu veux
les étapes pour obtenir ce que tu veux
les obstacles que tu rencontres
à quel niveau
si tu commançais par exposer ton problème plus clairement, tu aurais, par toi-même peut-être, un début de réponse.
décris plus précisément le problème, avec des échantillons de tes fichiers.
ce que tu as
ce que tu veux
les étapes pour obtenir ce que tu veux
les obstacles que tu rencontres
à quel niveau
hello !!
oui effectivement d'habitude j'explique un peu mieux ^^
alors en fait, ma boucle sert à générer le paramètre pour la commande 'head'
head -1 fichier par exemple, ben la je voulais utiliser une boucle pour remplacer le 1 par des valeurs.
en fait jusque là ca fonctionne. Maintenant le petit hic c'est que dans ma commande j'ai 2 fois la commande 'head' avec des param differents
si je fait un boucle pour le premier 'head', aucun problème
le parametre du premier 'head' est bien remplacé.
par contre le paramètre du second 'head' (que j'aimerais simplement incrementer de 1) je ne sais pas comment le générer par ce que je suis dans la meme comande.
Merci d'avance ;), j'espère que c'est clair...
oui effectivement d'habitude j'explique un peu mieux ^^
alors en fait, ma boucle sert à générer le paramètre pour la commande 'head'
head -1 fichier par exemple, ben la je voulais utiliser une boucle pour remplacer le 1 par des valeurs.
en fait jusque là ca fonctionne. Maintenant le petit hic c'est que dans ma commande j'ai 2 fois la commande 'head' avec des param differents
mplayer '<souligne>head </souligne>-$j /home/clem/Musique/test3 | tail -1' -vc null -vo null -ao pcm:file=/home/clem/Musique/Diab-Laury/'head -$n/home/clem/Musique/SoundCloud/.soundcloud/nom | tail -1'.wav
si je fait un boucle pour le premier 'head', aucun problème
j=1
while [ $j -lt 11 ]
do
mplayer '<souligne>head </souligne>-$j /home/clem/Musique/test3 | tail -1' -vc null -vo null -ao pcm:file=/home/clem/Musique/Diab-Laury/'head -$n/home/clem/Musique/SoundCloud/.soundcloud/nom | tail -1'.wav
let j=$j+3
done
le parametre du premier 'head' est bien remplacé.
par contre le paramètre du second 'head' (que j'aimerais simplement incrementer de 1) je ne sais pas comment le générer par ce que je suis dans la meme comande.
Merci d'avance ;), j'espère que c'est clair...
hello
le deuxième head peut-être remplacé par une boucle:
le deuxième head peut-être remplacé par une boucle:
....pcm:file=/home/clem/Musique/Diab-Laury/$(for n in 1 2 3 4;do head -$n....... ; done).wav
musiques=~/Musique j=1 while [ $j -lt 11 ] do mplayer 'sed -n ${j}p $musiques/test3' -vc null -vo null -ao pcm:file=$musiques/Diab-Laury/'sed -n $((j+1))p $musiques/SoundCloud/.soundcloud/nom'.wav j=$((j+3)) doneou bien
musiques=~/Musiques while read -r fichier do j=$((j+1)) test $j -lt 11 && mplayer "$fichier" -vc null -vo null -ao pcm:file=$musiques/Diab-Laury/'sed -n $((j+1))p $musiques/SoundCloud/.soundcloud/nom'.wav || break done <$musiques/test3
mais pourquoi 11 ? il y a quelque chose après la onzième ligne, ou le fichier ne compte-t-il que onze lignes ?
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
oui il y a onze ligne, 1vide plus les 10autres ^^
en gros je wget une source, je recup les lignes voulu dans un fichier
je prend ce fichier je recup 2 sortes d'info, un lien et un nom.
les liens sont pour mplayer et les nom sont pour les titre des sons (second head)
pour être clair le script permet de dl un son de soundcloud ou alors tout les sons d'une page.
il fonctionne très bien, j'avais juste remplacé les titres par l'heure minute seconde pour ne pas 'quil s'ecrase xD
Je viens de tester avec le for, ca marche... mais ca me lit que la première ligne de mon fichier, les autres lignes ne sont pas lues... enfin il me dl bien chaque fichier mais lui donne comme nom la première ligne... du coup ca ecrase a chaque fois
en gros je wget une source, je recup les lignes voulu dans un fichier
je prend ce fichier je recup 2 sortes d'info, un lien et un nom.
les liens sont pour mplayer et les nom sont pour les titre des sons (second head)
pour être clair le script permet de dl un son de soundcloud ou alors tout les sons d'une page.
il fonctionne très bien, j'avais juste remplacé les titres par l'heure minute seconde pour ne pas 'quil s'ecrase xD
Je viens de tester avec le for, ca marche... mais ca me lit que la première ligne de mon fichier, les autres lignes ne sont pas lues... enfin il me dl bien chaque fichier mais lui donne comme nom la première ligne... du coup ca ecrase a chaque fois
montre-nous les fichiers, et un exemple de commande type, ce sera plus clair.
on reprend
d'abord
wget -O page_reçue.html http://page_demandée.html
ensuite...
comment en arrives-tu à avoir deux fichiers ?
on reprend
d'abord
wget -O page_reçue.html http://page_demandée.html
ensuite...
comment en arrives-tu à avoir deux fichiers ?
#extraction des lignes contenant l'url du flux audio vers scd.txt grep 'http://media.soundcloud.com/stream/' 'ls -l | head -2 | tail -1 | cut -d\ -f 13' > scd.txt #extraction des titres cat scd.txt | awk -F 'title' '{print $2}' | awk -F '\"' '{print $3}' | tr ' ' '-' > title.txt
ensuite
i=3 while [ $i -lt 30 ] do head -$i /Users/cfiguiere/Music/SoundCloud/.soundcloud/scd.txt | awk -F 'streamUrl' '{print $2}' | awk -F '\"' '{print $3}' | tail -3 >> /Users/cfiguiere/Music/SoundCloud/.soundcloud/test2 let i=$i+3 done cat /Users/cfiguiere/Music/SoundCloud/.soundcloud/test2 | sort -u >> /Users/cfiguiere/Music/SoundCloud/.soundcloud/test3
et la fameuse boucle de la fin
j=1 while [ $j -lt 11 ] do mplayer 'head -$j /Users/cfiguiere/Music/SoundCloud/.soundcloud/test3 | tail -1' -vc null -vo null -ao pcm:file=/Users/cfiguiere/Music/SoundCloud/'head -1 /Users/cfiguiere/Music/SoundCloud/.soundcloud/scd.txt | awk -F 'username' '{print $2}' | awk -F '\"' '{print $3}' | tr ' ' '-''/$(for t in 1 2 3 4 5 6 7 8 9 10;do head -$t /Users/cfiguiere/Music/SoundCloud/.soundcloud/title | tail -1 ; done).wav let j=$j+1 done
ca aide assez ?
et pour info, voila les messages ressorti par mplayer AO PCM] File: /Users/cfiguiere/Music/SoundCloud/Roaring-Spirit/Teachings-Of-Dub-Part-01 (WAVE) PCM: Samplerate: 44100Hz Channels: Stereo Format s16le [AO PCM] Info: Faster dumping is achieved with -vc null -vo null -ao pcm:fast [AO PCM] Info: To write WAVE files use -ao pcm:waveheader (default). AO: [pcm] 44100Hz 2ch s16le (2 bytes per sample) Video: no video Starting playback... A: 208.1 (03:28.1) of 208.0 (03:28.0) 0.7% 0% Playing Phenix. File not found: 'Phenix' Failed to open Phenix. Playing Warrior-Style-Part-2---Mix. File not found: 'Warrior-Style-Part-2---Mix' Failed to open Warrior-Style-Part-2---Mix. Playing Warrior-Style-Part-1---Mix. File not found: 'Warrior-Style-Part-1---Mix' Failed to open Warrior-Style-Part-1---Mix. Playing Dawn-Stepper-(dub2). File not found: 'Dawn-Stepper-(dub2)' Failed to open Dawn-Stepper-(dub2).
et voila http://dl.free.fr/getfile.pl?file=/rEi3rWUq
mais pourquoi tu veux le code source de la page, zip31 ?
mais pourquoi tu veux le code source de la page, zip31 ?
Pour voir ce que tu veux exactement récupérer et s'il n'y a pas plus simple à faire...
Par contre j'ai besoin de savoir ce que sont censées récupérer exactement les commandes suivantes :
Je n'ai pas bien pigé ton grep sur la sortie de "ls...."
Par contre j'ai besoin de savoir ce que sont censées récupérer exactement les commandes suivantes :
#extraction des lignes contenant l'url du flux audio vers scd.txt grep 'http://media.soundcloud.com/stream/' 'ls -l | head -2 | tail -1 | cut -d\ -f 13' > scd.txt #extraction des titres cat scd.txt | awk -F 'title' '{print $2}' | awk -F '\"' '{print $3}' | tr ' ' '-' > title.txt
Je n'ai pas bien pigé ton grep sur la sortie de "ls...."
ca c'est parce que je n'ai pas utilisé wget -o name url xD
c'est du moi prose de tete a 100%, en fait je bosse dans un dossier dont le contenu est effacé a chaque fin du script, donc en gros le grep agit sur le seul fichier ( a ce moment là du script) qui est présent dans le dossier.
ensuite pour les titre, je recup le fichier scd et je recherche le mot "title" en decoupant tout ce qu'il y a autour pour pouvoir récup uniquement les titre des sons que je retravail pour remplacer les espace par '-' et je renvoi tout ca dans un fichier qui sera utilié par la suite dans mplayer pour donner un nom au son. (c'est que je coince avec ce fichiet et ma boucle contenant la commande mplayer)
c'est du moi prose de tete a 100%, en fait je bosse dans un dossier dont le contenu est effacé a chaque fin du script, donc en gros le grep agit sur le seul fichier ( a ce moment là du script) qui est présent dans le dossier.
ensuite pour les titre, je recup le fichier scd et je recherche le mot "title" en decoupant tout ce qu'il y a autour pour pouvoir récup uniquement les titre des sons que je retravail pour remplacer les espace par '-' et je renvoi tout ca dans un fichier qui sera utilié par la suite dans mplayer pour donner un nom au son. (c'est que je coince avec ce fichiet et ma boucle contenant la commande mplayer)
et je renvoi tout ca dans un fichier qui sera utilié par la suite dans mplayer pour donner un nom au son. (c'est que je coince avec ce fichiet et ma boucle contenant la commande mplayer)
D'où ma demande ;-\
Si on ne sait pas ce que tu récupères en sortie et comment, il nous sera difficile de t'aider et encore moins de trouver où ça coince.
Donc, merci de nous donner les compléments d'infos demandés !
A savoir, pour chaque commande de ton script, et à chaque étape, une idée de ce qui entre et sort et de ce que tu voudrais réellement.
Par exemple pour le fichier que tu m'as envoyé, qu'est-ce qui doit rester après traitement et se trouver dans le fichier "scd.txt" ???
D'où ma demande ;-\
Si on ne sait pas ce que tu récupères en sortie et comment, il nous sera difficile de t'aider et encore moins de trouver où ça coince.
Donc, merci de nous donner les compléments d'infos demandés !
A savoir, pour chaque commande de ton script, et à chaque étape, une idée de ce qui entre et sort et de ce que tu voudrais réellement.
Par exemple pour le fichier que tu m'as envoyé, qu'est-ce qui doit rester après traitement et se trouver dans le fichier "scd.txt" ???
je ressort ca
mais heuuu... la seule chose qui coince c'est que je ne suis pas au point pour la boucle while avec $i et $j a l'intérieure en fait
window.SC.bufferTracks.push({"id":48365485,"uid":"JTIyyF0lPsDv","user":{"username":"Roaring Spirit","permalink":"roaringspirit"},"uri":"/roaringspirit/teachings-of-dub-part-01","duration":1431088,"token":"mUBNY","name":"teachings-of-dub-part-01","title":"Teachings Of Dub Part 01","commentable":true,"revealComments":true,"commentUri":"/roaringspirit/teachings-of-dub-part-01/comments/","streamUrl":"http://media.soundcloud.com/stream/JTIyyF0lPsDv?stream_token=mUBNY","waveformUrl":"http://w1.sndcdn.com/JTIyyF0lPsDv_m.png","propertiesUri":"/roaringspirit/teachings-of-dub-part-01/properties/","statusUri":"/transcodings/JTIyyF0lPsDv","replacingUid":null,"preprocessingReady":true,"renderingFailed":false,"isPublic":true,"geo":[],"commentableByUser":true,"favorite":false,"followingTrackOwner":false}); window.SC.bufferTracks.push({"id":44519972,"uid":"8M9mn0IjSW5i","user":{"username":"Roaring Spirit","permalink":"roaringspirit"},"uri":"/roaringspirit/phenix","duration":208196,"token":"Fh2Wm","name":"phenix","title":"Phenix","commentable":true,"revealComments":true,"commentUri":"/roaringspirit/phenix/comments/","streamUrl":"http://media.soundcloud.com/stream/8M9mn0IjSW5i?stream_token=Fh2Wm","waveformUrl":"http://w1.sndcdn.com/8M9mn0IjSW5i_m.png","propertiesUri":"/roaringspirit/phenix/properties/","statusUri":"/transcodings/8M9mn0IjSW5i","replacingUid":null,"preprocessingReady":true,"renderingFailed":false,"isPublic":true,"geo":[],"commentableByUser":true,"favorite":false,"followingTrackOwner":false}); window.SC.bufferTracks.push({"id":34814028,"uid":"inMUQpwy2aKP","user":{"username":"Roaring Spirit","permalink":"roaringspirit"},"uri":"/roaringspirit/warrior-style-part-2-mix","duration":2266043,"token":"6DJVj","name":"warrior-style-part-2-mix","title":"Warrior Style Part 2 - Mix","commentable":true,"revealComments":true,"commentUri":"/roaringspirit/warrior-style-part-2-mix/comments/","streamUrl":"http://media.soundcloud.com/stream/inMUQpwy2aKP?stream_token=6DJVj","waveformUrl":"http://w1.sndcdn.com/inMUQpwy2aKP_m.png","propertiesUri":"/roaringspirit/warrior-style-part-2-mix/properties/","statusUri":"/transcodings/inMUQpwy2aKP","replacingUid":null,"preprocessingReady":true,"renderingFailed":false,"isPublic":true,"geo":[],"commentableByUser":true,"favorite":false,"followingTrackOwner":false}); window.SC.bufferTracks.push({"id":34078724,"uid":"it3xDPhavXNB","user":{"username":"Roaring Spirit","permalink":"roaringspirit"},"uri":"/roaringspirit/warrior-style-part-1-mix","duration":2319902,"token":"eoHE9","name":"warrior-style-part-1-mix","title":"Warrior Style Part 1 - Mix","commentable":true,"revealComments":true,"commentUri":"/roaringspirit/warrior-style-part-1-mix/comments/","streamUrl":"http://media.soundcloud.com/stream/it3xDPhavXNB?stream_token=eoHE9","waveformUrl":"http://w1.sndcdn.com/it3xDPhavXNB_m.png","propertiesUri":"/roaringspirit/warrior-style-part-1-mix/properties/","statusUri":"/transcodings/it3xDPhavXNB","replacingUid":null,"preprocessingReady":true,"renderingFailed":false,"isPublic":true,"geo":[],"commentableByUser":true,"favorite":false,"followingTrackOwner":false}); window.SC.bufferTracks.push({"id":27426870,"uid":"Qv2FNi6N0aPx","user":{"username":"Roaring Spirit","permalink":"roaringspirit"},"uri":"/roaringspirit/dawn-stepper-dub2","duration":229390,"token":"i75eZ","name":"dawn-stepper-dub2","title":"Dawn Stepper (dub2)","commentable":true,"revealComments":true,"commentUri":"/roaringspirit/dawn-stepper-dub2/comments/","streamUrl":"http://media.soundcloud.com/stream/Qv2FNi6N0aPx?stream_token=i75eZ","waveformUrl":"http://w1.sndcdn.com/Qv2FNi6N0aPx_m.png","propertiesUri":"/roaringspirit/dawn-stepper-dub2/properties/","statusUri":"/transcodings/Qv2FNi6N0aPx","replacingUid":null,"preprocessingReady":true,"renderingFailed":false,"isPublic":true,"geo":[],"commentableByUser":true,"favorite":false,"followingTrackOwner":false}); window.SC.bufferTracks.push({"id":27426434,"uid":"qpeDlaJKmQbV","user":{"username":"Roaring Spirit","permalink":"roaringspirit"},"uri":"/roaringspirit/tribulation-rmx","duration":211567,"token":"7YODd","name":"tribulation-rmx","title":"Tribulation (rmx)","commentable":true,"revealComments":true,"commentUri":"/roaringspirit/tribulation-rmx/comments/","streamUrl":"http://media.soundcloud.com/stream/qpeDlaJKmQbV?stream_token=7YODd","waveformUrl":"http://w1.sndcdn.com/qpeDlaJKmQbV_m.png","propertiesUri":"/roaringspirit/tribulation-rmx/properties/","statusUri":"/transcodings/qpeDlaJKmQbV","replacingUid":null,"preprocessingReady":true,"renderingFailed":false,"isPublic":true,"geo":[],"commentableByUser":true,"favorite":false,"followingTrackOwner":false}); window.SC.bufferTracks.push({"id":27426251,"uid":"DcFLBjxLpZ5c","user":{"username":"Roaring Spirit","permalink":"roaringspirit"},"uri":"/roaringspirit/tribulation-dub-rmx","duration":212377,"token":"N8wXi","name":"tribulation-dub-rmx","title":"Tribulation Dub (rmx)","commentable":true,"revealComments":true,"commentUri":"/roaringspirit/tribulation-dub-rmx/comments/","streamUrl":"http://media.soundcloud.com/stream/DcFLBjxLpZ5c?stream_token=N8wXi","waveformUrl":"http://w1.sndcdn.com/DcFLBjxLpZ5c_m.png","propertiesUri":"/roaringspirit/tribulation-dub-rmx/properties/","statusUri":"/transcodings/DcFLBjxLpZ5c","replacingUid":null,"preprocessingReady":true,"renderingFailed":false,"isPublic":true,"geo":[],"commentableByUser":true,"favorite":false,"followingTrackOwner":false}); window.SC.bufferTracks.push({"id":27425623,"uid":"xdYhdPXAfeWE","user":{"username":"Roaring Spirit","permalink":"roaringspirit"},"uri":"/roaringspirit/wood-stepper","duration":205139,"token":"8z4TG","name":"wood-stepper","title":"Wood Stepper","commentable":true,"revealComments":true,"commentUri":"/roaringspirit/wood-stepper/comments/","streamUrl":"http://media.soundcloud.com/stream/xdYhdPXAfeWE?stream_token=8z4TG","waveformUrl":"http://w1.sndcdn.com/xdYhdPXAfeWE_m.png","propertiesUri":"/roaringspirit/wood-stepper/properties/","statusUri":"/transcodings/xdYhdPXAfeWE","replacingUid":null,"preprocessingReady":true,"renderingFailed":false,"isPublic":true,"geo":[],"commentableByUser":true,"favorite":false,"followingTrackOwner":false});
mais heuuu... la seule chose qui coince c'est que je ne suis pas au point pour la boucle while avec $i et $j a l'intérieure en fait
awk '/http:\/\/media\.soundcloud\.com\/stream\//{ split($0,a,"title") split($0,b,"streamUrl") gsub(" ","_",a[2]) split(a[2],c,"\"") split(b[2],d,"\"") print c[3]" "d[3] }' ~/Téléchargements/roaringspirit | while read titre adresse do echo mplayer "$adresse" -vc null -vo null -ao "pcm:$titre" done
fichiers temporaires? a p'u!
code plus que bizarroïde? a p'u!
ça devrait fonctionner.
si le code affiche ce que tu veux, enlève le 'echo'.