Comment modifier une variable - shell tomtom

Résolu/Fermé
POLOCHON54 - 4 nov. 2009 à 11:51
 POLOCHON - 5 nov. 2009 à 09:38
Bonjour

Je cherche à récupérer des messages issus d'un fichier externe francais.lng, english.lng etc pour affichier les message popup d'un shell destiné à fonctionner sous le Linux Tomtom… donc affichage particulier en Popup flash au lieu de la simple commande "écran" echo.

Le problème est que mes messages sont dans des variables msg1, msg2 msg3 etc…

La lecture ligne à ligne du fichier francais.lng est correcte et je récupère bien la ligne lue dans la variable line

Ce qui ne marche pas est la mise en forme de la variable msg en lui ajoutant la valeur de i dans la boucle… et en lui affectant comme valeur la valeur de "$line" (pour fabriquer les variables msg1 msg2 etc et en modifier le message par défaut.

Soit la ligne :

msg$i = "$line"

Comment faire ? doit t'on créer un tableau pour les variable de message ?

Merci de votre aide.

Voici le code complet :

#!/bin/sh

##############################################
#
# Script pour traduction messages Popup
#
##############################################
# PWD, HOME and PATH
cd /mnt/sdcard
export PATH=$PATH:/mnt/sdcard/bin
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/mnt/sdcard/lib
export HOME=/mnt/sdcard/

##############################################
# MESSAGES POPUP PAR DEFAUT EN VARIABLE
##############################################
# mettre obligatoire des variables par défaut en anglais pour les messages
# Si absence d'un fichier lng les message seront ceux-ci.
msg0="Zero"
msg1="Message Popup 1 à afficher"
msg2="Message Popup 2 à afficher"
# etc…

##############################################
# ZONE DE CONFIGURATION
##############################################
# indiquer le nom du fichier de langage qu'on souhaite utiliser
# english.lng francais.lng etc…
lng="francais.lng"
# il se trouve maintenant dans la variable file_langage
##############################################
# FIN ZONE DE CONFIGURATION
##############################################

##############################################
# LETURE DU FICHIER LNG LIGNE A LIGNE
##############################################
# variable i de comptage
i=0
# Codage du chemin copmplet du fichier lng dans répertoire bin soit
filelng="/mnt/sdcard/bin/$lng"
#Tester d'abord si le fichier choisi existe avec la commande –e fichier
if –e $filelng
then
# Si le fichier lng choisi est absent donc on prévient l'utilisateur que
# dans ces conditions ce sont les valeurs par défaut des variables
# de message qui sont utilisée…
# Eventuellement mettre ce popup d'information
echo -e "FlashMessageV01|$filelng absent|5000|\0\c" >"/var/run/SDK.TomTomNavigationServer.$$.1.message"
echo finish>"/var/run/SDK.TomTomNavigationServer.$$.1.finished"

else
# sinon lire fichier ligne à ligne en incrémentant la variable de départ i
# pour alimenter la variable de message qui va bien
while read line
# On entre maintenant dans boucle de lecture et récup des messages
do

# Incrémenter de 1 par tour de boucle
let i++

# Ajouter derrière msg la valeur de i pour fabriquer la variable msg1, msg2
# puis lui affecter la valeur de la variable line
msg$i = "$line"

# remise a vide de la variable line pour la suite
line=""
done < $filelng

fi
A voir également:

7 réponses

dubcek Messages postés 18753 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 7 novembre 2024 5 619
4 nov. 2009 à 16:11
si j'ai un fichier qui contient des lignes de texte, je crée des variables msg1, msg2, etc avec chaque ligne.
$ ./f1
msg1='message 1'
msg2='message 2'
msg3='message 3'
msg4='message 4'
msg5='message 5'
msg6='message 6'
msg7='message 7'
$ cat f1
#!/bin/bash

c=1
cat << XX | (while read L
message 1
message 2
message 3
message 4
message 5
message 6
message 7
XX
do
	export msg${c}="$L"
	c=$((c+1))
done
set | grep msg)
1
Effectivement je partais d'un fichier txt ne contenant en interne que le message à afficher sur chaque ligne et non sa variable suivi du message à afficher ! je vais tester en suivant cette logique tout cela ce soir avec le shell dans le /bin du tomtom !

En outre la syntaxe Linux tomtom diffère de la syntaxe du langage c ou celle de Linux et ne reprend pas tous les mots clefs… En outre mes recherches sur internet d'un tuto spécifique restent vaine !

1000 Merci pour ce coup de main !
1
problème résolu avec cette instruction
export msg${i}="$line"
Encore 1000 mercis pour ce coup de main
1
Précision :
Ce qui ne marche pas est la mise en forme de la variable msg en lui ajoutant la valeur de i dans la boucle… et en lui affectant comme valeur la valeur de "$line" (pour fabriquer les variables msg1 msg2 etc et en modifier le message par défaut.

Soit la ligne :

msg$i = "$line"
ou
msg$i="$line"
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
${'msg'.$i}="$line"

Comme vu sur ce site ne marche pas non plus !
0
dubcek Messages postés 18753 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 7 novembre 2024 5 619
4 nov. 2009 à 15:10
hello
quelque chose comme ça
$ cat f1
#!/bin/bash

msg1="message 1"
msg2="message 2"
msg3="message 3"
msg4="message 4"
msg5="message 5"
msg6="message 6"
msg7="message 7"

for ((i=1 ; i < 8 ; i++)) ; do
	m=msg${i} ; eval m2=\$$m ; echo i=$i : $m2
done

$ ./f1
i=1 : message 1
i=2 : message 2
i=3 : message 3
i=4 : message 4
i=5 : message 5
i=6 : message 6
i=7 : message 7
0
Merci dudcek....

mais j'ai peur de ne pas comprendre les subtilités de ce script, mais il est vrai que je débute dans ce langage !

En fait je dispose d'un fichier francais.lng externe au shell
Dans ce fichier j'ai ligne par ligne les messages dans la langue concernée soit le français pour cet exemple.

Ce que je souhaite c'est que mon shell remplace les messages par défaut en anglais par les messages traduit en francais issus du fichier texte francais.lng.

Mais surtout que les variables ne changent pas donc reste msg1, msg2 etc..

Or d'après ce que je pense comprendre au script ci-dessus c'est que désormais la traduction est dans la variable $m2 et non pas dans $msg1, $msg2…
0