Je suis actuellement en train faire l'exercice suivant du cours "Reprendre le contrôle avec Linux" :
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 !
Si aucun paramètre n'est envoyé, vous demanderez à l'utilisateur de saisir le nom des fichiers à renommer avecread.
Voici mon script :
#!/bin/bash
2
3 if [ $1 = "txt" ] && [ -n $1 ]
4 then
5 read -p "Veuillez indiquer le suffixe souhaité :" ext
6
7 var=`ls *.txt`
8
9 for fichier in $var
10 do
11 mv $fichier $fichier-$ext
12 done
13 echo "Done !"
14 fi
15
16 if [ -z $1 ]
17 then
18 read -p "Indiquez les fichier que vous souaitez modifier :" stack
19 read -p "Indiquez le suffixe à ajouter : " ext
20 for variable in $stack
21 do
22 if [ -e $variable ] && [ -f $variable ]
23 then
24 mv $variable $variable-$ext
25
26 elif [ -d $variable ]
27 then
28 echo " n'est pas un fichier"
29 exit 1
30 fi
31 done
32 echo "Done !"
33 fi
Mon script fonctionne parfaitement, ou presque ... Quand mon script essaye d'exécuter la deuxième condition (dans laquelle aucun paramètre n'est envoyé), une ligne s'affiche juste avant le premier message du "read" me signalant qu'un opérateur unaire est attendu :
./multi.sh
./multi.sh: ligne 3 : [: = : opérateur unaire attendu
Indiquez les fichier que vous souhaitez modifier :
Au début j'ai pensé qu'au lancement du script, celui-ci allait d'abord vérifiait la toute première condition du "if" :
if [ $1 = "txt" ]
Et que à ce moment précis le script s'attendait peut être à ce qu'il y ait un paramètre envoyé pour le 1$. D'où l'erreur.
Du coup j'ai ajouté une autre condition avec && pour en gros dire au script de ne vérifier la toute première condition du "if" seulement dans le cas où la chaîne est non vide en pensant que ça allait résoudre le soucis :
&& [ -n $1 ]
Ça n'a malheureusement rien donné. Est-ce que vous pourriez m'expliquer pourquoi j'ai cette erreur s'il vous plait ?
Le message d'erreur n’empêche pas l'exécution du script.
Je souhaiterais aussi savoir autre chose.
Mon script ne correspond pas exactement à ce qui est demandé dans l'exercice:
Dans l'exercice on nous demande d'écrire un script qui reçoit en paramètre *.txt et je n'ai pas su comment coder ça. J'ai essayé de faire une condition "if" du genre :
if [ $1 = "*.txt"]
then
etc
et ce pour recevoir le paramètre indiqué dans l'énoncé mais ça n'a pas fonctionné. Du coup j'ai été contraint de modifier un peu mon script. Mais je suis vraiment intrigué de savoir comment faire pour que le script reçoive en paramètre "*.txt".
Est-ce quelqu'un pourrait m'expliquer ? Ça serait vraiment cool et ça m'aiderait beaucoup pour la suite.
Your future self is watching you right now through memories !
if list; then list; [ elif list; then list; ] ... [ else list; ] fi The if list is executed. If its exit status is zero, the then list is executed. Otherwise, each elif list is executed in turn, and if its exit status is zero, the corresponding then list is executed and the command completes. Otherwise, the else list is executed, if present. The exit status is the exit status of the last command executed, or zero if no condition tested true.
Dans ce contexte, le
if list
Est un branchement conditionnel ou l'équivalent de "if condition(s)" qui est générique (une suite des test(s)), non restreint à une commande. Même si les apprenants ne comprennent pas que "[" est l'équivalent de la commande test.
Il est conseillé de tester les codes d'erreur de toutes les commandes, la documentation bash ne parle pas de commandes : s'il y en a une, elle devrait être précédée d'un "test". Cela fait partie des "Best Practices".
L'utilisation d'une commande avec un "if" n'est pas facilement compréhensible par des débutants et ce n'est pas l'objet de sa question.
Je ne veux pas rentrer dans ce débat et je me focalise sur le problème de l'élève. Excellente journée à toi.
- Edité par BugHunt3r 11 septembre 2019 à 13:31:48
Pensez a mettre +1 aux messages qui vous ont aidé et mettre résolu quand cela l'est.
list doit être entendu comme une liste de commandes (cf. man bash /Lists)
les débutants ne peuvent pas comprendre ce qu'on ne leur explique pas.
et les enseignants doivent se souvenir qu'ils sont aussi des apprenants, tout le temps; qu'ils n'ont pas acquis, une fois pour toutes, un savoir perpétuel.
- Edité par dantonq 11 septembre 2019 à 15:52:15
Validez la réponse utile « Un problème clairement exposé est à moitié résolu. » Pas de MP technique
Merci beaucoup d'avoir pris le temps de répondre à mon sujet.
En vous souhaitant une bonne soirée.
Cordialement.
Azim
Your future self is watching you right now through memories !
Besoin d'aide pour l'exercice multirenommage.sh
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
Your future self is watching you right now through memories !
Validez la réponse utile « Un problème clairement exposé est à moitié résolu. » Pas de MP technique
Your future self is watching you right now through memories !
Pensez a mettre +1 aux messages qui vous ont aidé et mettre résolu quand cela l'est.
Validez la réponse utile « Un problème clairement exposé est à moitié résolu. » Pas de MP technique
Pensez a mettre +1 aux messages qui vous ont aidé et mettre résolu quand cela l'est.
Validez la réponse utile « Un problème clairement exposé est à moitié résolu. » Pas de MP technique
Pensez a mettre +1 aux messages qui vous ont aidé et mettre résolu quand cela l'est.
Validez la réponse utile « Un problème clairement exposé est à moitié résolu. » Pas de MP technique
Your future self is watching you right now through memories !