Bonjour,
J'aimerai améliorer mon script, c'est à dire fusionner la ligne 7 et la ligne 8 en une et une seule ligne.
Le script fait la chose suivante :
On va supposer que dans un fichier il y est une série de ligne avec le format suivant :
Path: premier_serveur!deuxieme_serveur!troisième_serveur!...!n_serveur!not-for-mail
Le but est d'avoir ceci :
premier_serveur
deuxieme_serveur
troisieme_serveur
...
n_serveur
not-for-mail
J'ai créé un fichier texte que j'ai appelé message.txt
Le script bash que j'ai fait fonctionne.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 cat message.txt Path: premier_serveur!deuxieme_serveur!troisieme_serveur!not-for-mail
Cependant les améliorations que j'ai tenté d'apporter afin de fusionner la ligne 7 et la ligne 8 en une et une seule ligne se sont avérées infructueuses.
En effet cela boucle à l'infini et je ne comprends pas pourquoi.
Es ce que vous pouvez m'expliquer pourquoi ?
Ci dessous le script qui fonctionne + les 2 tentatives d'améliorations (échecs) avec les commentaires :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51 #!/bin/bash #Script qui fonctionne #============================================ ligne=$(grep "Path: ") liste_serveurs=${ligne#Path: } while [ -n "$liste_serveurs" ] do serveur=${liste_serveurs%%\!*} # premier élement (le point d'exclamation est supp) liste_serveurs=${liste_serveurs#$serveur} # on l'enlève de la liste liste_serveurs=${liste_serveurs#\!} # on supprimer le point d'exclamation restant echo $serveur done #============================================ #=========================================================================================== # POSSIBILITE D'AMÉLIORATION : # faire de la ligne 7 et la ligne 8 une et une seule ligne #=========================================================================================== <<commentaire Première tentative : ================== ligne=$(grep "Path: ") liste_serveurs=${ligne#Path: } while [ -n "$liste_serveurs" ] do serveur=${liste_serveurs%%\!*} liste_serveurs=${liste_serveurs#${serveur}\!} echo $serveur done Résultat : Boucle infinie et affiche not-for-mail (le dernier élément de la liste) ================== Deuxième tentative : ================== ligne=$(grep "Path: ") liste_serveurs=${ligne#Path: } while [ -n "$liste_serveurs" ] do serveur=${liste_serveurs%%\!*} liste_serveurs=${liste_serveurs#$\{serveur\}\!} echo $serveur done Résultat : Boucle infinie et affiche premier_serveur (le premier élément de la liste) ================== commentaire
Partager