Script shell et la fonction tr

Résolu/Fermé
rordinas Messages postés 22 Date d'inscription jeudi 1 février 2007 Statut Membre Dernière intervention 28 avril 2009 - 27 mars 2008 à 20:35
rordinas Messages postés 22 Date d'inscription jeudi 1 février 2007 Statut Membre Dernière intervention 28 avril 2009 - 27 mars 2008 à 23:01
Bonjour,

Je suis confronté à un petit soucis concernant l'utilisation de la fonction tr dans un script shell.
En fait je souhaiterais que la chaine contenu dans $var1(bébé) soit converti dans $var2 en une chaine exempt de tout accent (soit bebe)
Voici mon script :

#!/bin/sh

var1=bébé

echo $var1

var2=`echo $var4 | tr 'àçéèêëîïôöùü' 'aceeeeiioouu'`

echo $var2

le truc c'est que j'ai l'impression que le script ignore ce qui se trouve apres le pipe, soit la fonction tr et je me retrouve donc avec une chaine dans $var2 identique à celle de $var1!!!
Ce que je trouve bizare c'est que ma syntaxe à l'air correct étant donné que si dans la console je lance :
echo bébé | tr 'àçéèêëîïôöùü' 'aceeeeiioouu' et bien tout se passe impécablement bien et je me retrouve avec la chaine bebe....

surement un truc bète mais j'y comprend rien!!

Merci d'avance

PS : je suis sous debian etch
A voir également:

6 réponses

jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 897
27 mars 2008 à 22:10
Exécute ton script en ajoutant "set -xv" après la ligne "shebang", histoire qu'on voit un peu comment sont interprétées les variables, et affiche le résultat...
1
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 897
27 mars 2008 à 20:40
Salut,

Y'a pas un os là "$var4" :
var2=`echo $var4 | tr 'àçéèêëîïôöùü' 'aceeeeiioouu'` 
???

;-))
0
rordinas Messages postés 22 Date d'inscription jeudi 1 février 2007 Statut Membre Dernière intervention 28 avril 2009 2
27 mars 2008 à 21:49
euh si si y a un os je me suis trompé dans la réécriture du script^^

le bon script c est :


#!/bin/sh

var1=bébé

echo $var1

var2=`echo $var1 | tr 'àçéèêëîïôöùü' 'aceeeeiioouu'`

echo $var2
0
Bon alors,

je vais reprendre mon post depuisle début car il semblerais que mon problème ne soit plus d'actualité (j'ai exécuté le script sur un autre PC).
Maintenant au lieu de m'afficher bebe il m'affiche buebue et je vois pas trop pourquoi :(

bon comme tu me l as demandé, si j'ai bien compris ce qu'étais le sheebang (ligne #!/usr/bin/sh?) je te poste le résultat du script avec la ligne set -xv :

server:~# ./testtr.sh

var1=bébé
+ var1=$'b\303\251b\303\251'

echo $var1
+ echo $'b\303\251b\303\251'
bébé

var2=`echo $var1 | tr 'àçéèêëîïôöùü' 'aceeeeiioouu'`
echo $var1 | tr 'àçéèêëîïôöùü' 'aceeeeiioouu'
++ echo $'b\303\251b\303\251'
++ tr $'\303\240\303\247\303\251\303\250\303\252\303\253\303\256\303\257\303\264\303\266\303\271\303\274' aceeeeiioouu
+ var2=buebue

echo $var2
+ echo buebue
buebue


merci de porter attention à mon problème
0

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

Posez votre question
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 897
27 mars 2008 à 22:50
Ça fait pareil chez moi (beubeu) ;-((

Essaie avec "sed" :
#!/bin/sh

set -xv

var1=bébé

echo $var1

var2=`echo $var1 | sed 'y/àçéèêëîïôöùü/aceeeeiioouu/'`

echo $var2
;-))
0
rordinas Messages postés 22 Date d'inscription jeudi 1 février 2007 Statut Membre Dernière intervention 28 avril 2009 2
27 mars 2008 à 23:01
ca marche à la perfection!!!!

Merci beaucoup pour ton aide
0