Amélioration d'un script (parameter expansion)
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
Code:
1 2
| cat message.txt
Path: premier_serveur!deuxieme_serveur!troisieme_serveur!not-for-mail |
Le script bash que j'ai fait fonctionne.
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:
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 |