J'ai essayé de créer un script Bash Shell qui créerait et modifierait un fichier appelé list
. En réalité, mon objectif avec le programme est d’ajouter des noms à une liste, en créant le fichier avec un en-tête (si nécessaire).
Cependant, le script échoue actuellement à un moment donné: chaque fois que je le relance, l'ancien nom disparaît et est remplacé par le nom qui vient d'être entré. Comment puis-je résoudre ça?
Mon script:
#!/bin/bash
#Please sign your name here.
echo "Hi, what's your name?"
read name
echo "Hi $name, welcome to the Linux course!"
echo Course Attendees > list
echo $name >> list
Exemple de problème:
$ bash list.sh
Hi, what's your name?
Test
Hi Test, welcome to the Linux course!
$ cat list
Course Attendees
Test
$ bash list.sh
Hi, what's your name?
Test2
Hi Test, welcome to the Linux course!
$ cat list
Course Attendees
Test2
Dans Bash, il y a deux façons d'écrire dans un fichier (techniquement, il y en a beaucoup plus, mais pour ce qui est de cette réponse, il y en a deux):
Tout d’abord, l’opérateur >
, que vous utilisez dans cette ligne:
echo Course Attendees > list
L'opérateur >
va écraser tout élément existant dans le fichier avec le nouveau contenu du fichier. En effet, il supprime le fichier et en crée un nouveau portant le même nom.
Deuxièmement, il y a l'opérateur >>
, utilisé ici:
echo $name >> list
Ceci ajoute des lignes à un fichier existant ou en crée un nouveau s'il n'existe pas .
Lorsque vous exécutez votre script, vous écrasez toujours votre liste de cours avec l'en-tête "Participants au cours", ce qui provoque cette erreur. Modifiez votre programme pour ajouter des lignes uniquement si l'en-tête "Participants au cours" est présent. Ma suggestion personnelle serait de vérifier si le fichier existe. Si tel est le cas, utilisez uniquement l'opération d'ajout. Sinon, donnez-lui l'en-tête et créez-le.
Ou, plus élégamment, exécutez uniquement echo Course Attendees > list
si le fichier n'existe pas. Voir this SO answer pour plus d'informations sur comment exécuter une vérification comme celle-ci.