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 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. hmm
de toutes façons, un cours dans lequel on lit for i in `ls` roll 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

Watael a écrit :

et, ils n'ont pas de forum ?

Si, mais ils n’ont pas Watael.

Watael a écrit :

- pourquoi passes-tu *.txt au script ?

Parce que c’est l’énoncé de l’exercice(1) ?

Watael a écrit :

- 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. smile


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

Hors ligne

#5 Le 01/11/2021, à 04:46

nany

Re : Exercice BASH - Boucle For

Watael a écrit :

oui.
j'ai fait un edit à mon message précédent. J e m'y défoule un peu pour éviter l'attaque. smile

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 tongue

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

Watael a écrit :

je ne vois pas pourquoi. 8O

Parce que j'ai lu

fichiers=("$@")

au lieu de

fichiers=$@

big_smile

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 smile

Hors ligne