Problème avec read et IFS
Bonjour,
Ayant récemment passé un examen sur ordinateur concernant l'utilisation des scripts shells sur Linux , je me retrouve devant un problème bien étrange.
Je vous présente le code ainsi que son utilisation et un exemple de fichier allant avec.
Nom du script: équipe_victoire
Compatible avec: Bash
Descriptif: permet de trouver le nombre de victoire d'une équipe en fonction d'une année et d'un nom d'équipe.
Exemple d'exécution : ./equipe_victoire 2014 Lyon fichier_equipe
Code
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
| #! /bin/bash
# tata.sh
if [ $# -ne 3 ]
then
echo "Parametre differents de 3"
else
equipe=$2
saison=$1
for i in $(cat $3)
do
bak=$IFS
echo $i #placer pour tester la valeur de i avant le changement de l'IFS
IFS=';'
echo $i #placer pour tester la valeur de i après le changement de l'IFS
read a b c d <<< $i
if [ $a = "$equipe" ] && [ $c = "$saison" ]
then
echo "Nombre de victoire de $equipe à la saison $saison: $d"
break
fi
IFS=$bak
done
fi |
Fichier : # Format équipe;ligue;annee;victoires
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
|
Lyon;1;2014;21
Paris;1;2014;29
Marseille;1;2014;16
Monaco;1;2014;18
Lyon;1;2010;20
Paris;1;2010;32
Marseille;1;2010;28
Monaco;1;2010;28
Ajjacio;2;2014;21
Saint-Etienne;2;2014;29
Real;2;2014;16
Guimgang;2;2010;19
Ajjacio;2;2010;22
Saint-Etienne;2;2010;30
Real;2;2010;20
Guimgang;2;2010;10 |
Alors, je sais que le code n'est pas dès plus beau et qu'on peut passer par des grep mais je n'y avais pas pensé. Cependant lorsque je l'ai testé lors de mon contrôle il se trouve qu'il m'affichait bien le bon résultat avec l'équipe voulu et le nombre de ses victoires. Mais le point étrange et qu'aujourd'hui quand je retest le code il ne marche plus du tout , après le changement de l'IFS $i n'est plus égale à "équipe;ligue;année;victoires" mais à "équipe ligue année victoires" ce qui change tout car l'IFS étant changé le read voit cette phrase comme une seule valeur.
J'ai essayé de comprendre l'erreur mais en vain, pourriez vous m'éclairer sur le sujet?
Merci d'avance,
Bonne soirée !