Pages : 1
#1 Le 01/11/2021, à 01:09
- ZliX
Exercice BASH - Boucle For
Bonsoir,
Je suis actuellement en pleine formation OpenclassRooms: "Reprenz le contrôle grâce à Linux"...
et ça fait 4h que je bute sur un exercice qui à mon avis est très simple pour vous, j'ai tout essayer:
Je pense que c'est le $1 qui me pose problème, je comprend que c'est le 1er paramètre mais vous comprendrez mieux avec cet exercice:
EXERCICE:
"À vous de jouer ! Essayez de créer un script multirenommage.sh, reposant sur ce principe, qui va rajouter le suffixe-old… uniquement aux fichiers qui correspondent au paramètre envoyé par l'utilisateur !"
./multirenommage.sh *.txt
Ce que j'ai essayé en vain...:
for fichiers in $1
do
mv $fichiers $fichiers-old
done
Résultat: il ne me renomme que le premier fichier.txt alors que moi je voulais tous les renommer *.txt ( d'ou la commande avec le 1er paramètre en *.txt)
Merci d'avance pour votre précieuse aide.
Hors ligne
#2 Le 01/11/2021, à 02:00
- Watael
Re : Exercice BASH - Boucle For
salut,
Je suis actuellement en pleine formation OpenclassRooms: "Reprenez le contrôle grâce à Linux"...
et, ils n'ont pas de forum ?
explique-nous :
- pourquoi passes-tu *.txt au script ?
- quelles informations sont réellement reçues par le script ?
EDIT:
en fait, l'exercice est mal exposé, et on ne comprend pas parfaitement ce qu'il faut faire.
l'ambiguïté est accentuée par la deuxième partie de l'exercice, qui demande de faire procéder à une saisie des noms des fichiers à modifier si aucun argument n'est donné.
par exemple, dans le cours, en effet, il est montré de passer *.txt au script, mais
le script doit-il traiter une extension, ou la liste des fichiers émanant de la Développement des chemins ?
parce qu'il est question d'un paramètre, mais ce développement va passer autant de paramètres au script qu'il y a de fichiers correspondant à l'expression (*.txt).
alors, forcément, vous ne pouvez que "essayer de créer un script" à partir d'un énoncé aussi boiteux.
de toutes façons, un cours dans lequel on lit for i in `ls` ne peut pas être un bon cours. C'est un pêché de jeunesse qui n'a jamais été corrigé.
et puis, on ne dit pas "rajouter", parce que "re-ajouter", c'est "ajouter encore", c'est-à-dire, mettre en plus (ajouter) deux fois (re).
Dernière modification par Watael (Le 01/11/2021, à 04:20)
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#3 Le 01/11/2021, à 04:10
- nany
Re : Exercice BASH - Boucle For
et, ils n'ont pas de forum ?
Si, mais ils n’ont pas Watael.
- pourquoi passes-tu *.txt au script ?
Parce que c’est l’énoncé de l’exercice(1) ?
- quelles informations sont réellement reçues par le script ?
Là je préfère ne pas répondre car ça donnerait quasiment la solution.
(1) Ne remonte pas pour voir le cours, tu risques d’avoir une attaque.
Hors ligne
#4 Le 01/11/2021, à 04:22
- Watael
Re : Exercice BASH - Boucle For
oui.
j'ai fait un edit à mon message précédent. J e m'y défoule un peu pour éviter l'attaque.
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#5 Le 01/11/2021, à 04:46
- nany
Re : Exercice BASH - Boucle For
oui.
j'ai fait un edit à mon message précédent. J e m'y défoule un peu pour éviter l'attaque.
Alors le for fichier in `ls` ne te fait ni chaud ni froid ?
[edit]
Je viens de voir ton edit de l’edit alors je raye ma question.
[/edit]
Dernière modification par nany (Le 01/11/2021, à 04:54)
Hors ligne
#6 Le 01/11/2021, à 04:48
- nany
Re : Exercice BASH - Boucle For
[spoiler]
#!/bin/bash
if test $# -ge 1
then
fichiers=$@
else
read -p "Quels fichiers voulez-vous renommer ? " fichiers
fi
for fichier in $fichiers
do
mv -v "$fichier" "$fichier-old"
done
[/spoiler]
Hors ligne
#7 Le 01/11/2021, à 18:20
- kamaris
Re : Exercice BASH - Boucle For
Là tu ne traites que le premier fichier
Hors ligne
#8 Le 01/11/2021, à 18:52
- Watael
Re : Exercice BASH - Boucle For
je ne vois pas pourquoi. 8O
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#9 Le 01/11/2021, à 19:01
- nany
Re : Exercice BASH - Boucle For
[spoiler]
~$ ./test
Quels fichiers voulez-vous renommer ? toto titi tata
renommé 'toto' -> 'toto-old'
renommé 'titi' -> 'titi-old'
renommé 'tata' -> 'tata-old'
~$ ./test toto titi tata
renommé 'toto' -> 'toto-old'
renommé 'titi' -> 'titi-old'
renommé 'tata' -> 'tata-old'
~$ ./test t?t?
renommé 'tata' -> 'tata-old'
renommé 'titi' -> 'titi-old'
renommé 'toto' -> 'toto-old'
[/spoiler]
Hors ligne
#10 Le 01/11/2021, à 19:04
- kamaris
Re : Exercice BASH - Boucle For
je ne vois pas pourquoi. 8O
Parce que j'ai lu
fichiers=("$@")
au lieu de
fichiers=$@
Pour essayer de me rattraper aux branches : ce serait mieux de faire
fichiers=("$@")
puis
for fichier in "${fichiers[@]}"
Hors ligne
#11 Le 01/11/2021, à 19:09
- nany
Re : Exercice BASH - Boucle For
Oui mais là tu es en train de montrer en clair les solutions possibles à l’exercice (quand bien même son énoncé est bancal).
Hors ligne
#12 Le 01/11/2021, à 19:19
- kamaris
Re : Exercice BASH - Boucle For
Bah ce ne sont que des indices, et puis j'imagine que l'exercice est résolu à l'heure qu'il est
Hors ligne