Léa-Linux & amis :   LinuxFR   GCU-Squad   GNU
[Shell] test du format du contenu d'une variable
Envoyé par: cancerus

Bonjour,

Je recherche un moyen relativement simple pour tester le format des arguments d'une ligne de commande.
Par exemple, audit.ksh titi.txt 1.2

Je veux m'assurer que $1 est bien une chaine de caractéres (lettres, chiffres et 1 point) et que $2 est bien constitué de chiffres avec un point quelque part (10.52, 1.4, 4.99, des valeurs de ce type).

J'imagine que c'est possible avec echo et grep. Toutefois, peut être existe-t-il quelque chose de plus sympathique. J'ai bien conscience que je ne pourrais me passer des expressions régulières.

D'avance merci de vos réponses.
Bonne journée.

Poste le Tuesday 8 April 2008 10:59:17
Répondre     Citer    
Re: [Shell] test du format du contenu d'une variable
Envoyé par: cancerus

Se pourrait-il que la commande expr puisse m'apporter plus de finesse ?

$ expr TER.SNCF : [A-Z][a-zA-Z]\*[.]\*[a-zA-Z]\*
$ 8

$ expr TER12.SNCF : [A-Z][a-zA-Z]\*[.]\*[a-zA-Z]\*
$ 3

Maintenant, si je parviens à retrouver la commande pour avoir la longueur d'une chaîne de caractères, je pourrais comparer la longueur totale de la chaîne à la longueur donnée par la commande précédente et valider la totalité du contenu de la chaîne de caractères.

A creuser...

Poste le Tuesday 8 April 2008 14:01:00
Répondre     Citer    
Re: [Shell] test du format du contenu d'une variable
Envoyé par: oudoubah

Citation
cancerus
J'imagine que c'est possible avec echo et grep.
Toutefois, peut être existe-t-il quelque chose de
plus sympathique. J'ai bien conscience que je ne
pourrais me passer des expressions régulières.

C'est très sympathique grep! ;-)

Honnêtement, je pense que faire autrement relèvera plus du bricolage.

Et puis, cela peut être un très bon moyen d'apprendre grep. Ça pourra te servir plus tard.

Tu as lu les docs. Tu es devenu un informaticien. Que tu le veuilles
ou non. Lire la doc, c'est le Premier et Unique Commandement de
l'informaticien.
-+- TP in: Guide du Linuxien pervers - "L'évangile selon St Thomas"

Poste le Tuesday 8 April 2008 20:33:23
Répondre     Citer    
Re: [Shell] test du format du contenu d'une variable
Envoyé par: cancerus

Merci oudoubah.

Tu pourras alors me dire ce qui ne va pas dans ma syntaxe suivante (là on tombe du côté des expressions régulières) :

$ echo "TER.SNCF" | grep [A-Z][a-zA-Z]\*[.]\*[a-zA-Z]\*
TER.SNCF
$ echo "TER12.SNCF" | grep [A-Z][a-zA-Z]\*[.]\*[a-zA-Z]\*
TER12.SNCF

La première commande correspond à ce que j'attends.
En revanche, pour la seconde, je pensais tomber sur quelque chose du genre "TER" et non toute ma chaîne...

Je ne remets pas en doute le fonctionnement de grep, cela veut donc dire que l'erreur vient de mon expression régulière (ou de l'utilisation que je veux en faire).

D'avance merci et bonne journée.

Poste le Wednesday 9 April 2008 10:06:18
Répondre     Citer    
Re: [Shell] test du format du contenu d'une variable
Envoyé par: oudoubah

grep par défaut renvoie la ligne qui matche. Si tu veux qu'il ne renvoie que la partie qui matche, il faut utiliser l'option -o

Tu as lu les docs. Tu es devenu un informaticien. Que tu le veuilles
ou non. Lire la doc, c'est le Premier et Unique Commandement de
l'informaticien.
-+- TP in: Guide du Linuxien pervers - "L'évangile selon St Thomas"

Poste le Wednesday 9 April 2008 10:23:43
Répondre     Citer    
Re: [Shell] test du format du contenu d'une variable
Envoyé par: cancerus

L'option -o n'existe pas sous ksh pour AIX 5.2... (et peut être ksh en général ?)

:-(

Poste le Wednesday 9 April 2008 16:44:13
Répondre     Citer    
Re: [Shell] test du format du contenu d'une variable
Envoyé par: oudoubah

Citation
cancerus
L'option -o n'existe pas sous ksh pour AIX 5.2...
(et peut être ksh en général ?)

Ce n'est pas une question de shell, mais de version de grep. La tienne ne doit donc pas être la gnu. Il n'y a pas d'option semblable dans ta version? (man grep)

Tu as lu les docs. Tu es devenu un informaticien. Que tu le veuilles
ou non. Lire la doc, c'est le Premier et Unique Commandement de
l'informaticien.
-+- TP in: Guide du Linuxien pervers - "L'évangile selon St Thomas"

Poste le Friday 11 April 2008 12:29:05
Répondre     Citer    
Re: [Shell] test du format du contenu d'une variable
Envoyé par: cancerus

Hello !!!

Je n'ai pas trouvé d'option équivalente pour le moment donc je m'en suis sorti avec expr.

1. j'obtiens la longueur totale du contenu de ma variable par:
LENGTH_PARM=`expr $TOTO : ".*"`

2. j'obtiens le nombre de caractère qui matche avec mon expression régulière par :
TEST_PARM=`expr $TOTO : [1-9][0-9]*.[0-9][0-9]*`

3. si TEST_PARM=LENGTH_PARM, ça veut dire que mon expression correspond à mon expression régulière.

Merci à toi oudoubah.
Si jamais je trouve l'option correspondante pour ma version de grep. Je la posterai.

Poste le Monday 14 April 2008 15:01:08
Répondre     Citer    
Re: [Shell] test du format du contenu d'une variable
Envoyé par: shellout

si tu veux la longueur d'une variable:

var=foo;echo ${#var}

si tu veux voir si ta variable correspond a ton expression reguliere, teste simplement le code de retour

de expr:
foo="1.3";
if expr "$foo" : '[1-9][0-9]*.[0-9][0-9]*$' >/dev/null;then 
  echo "match" 
else 
  echo "ne match pas"
fi

avec grep:
if echo "$foo" | grep -l '^[1-9][0-9]*.[0-9][0-9]*$' >/dev/null
then 
  echo "match" 
else 
  echo "ne match pas"
fi


avec bash ou ksh:
shopt -s extglob # avec ksh pas besoin de cette ligne
if [[ $foo = [1-9]*([0-9).+([0-9]) ]]; then 
  then 
  echo "match" 
else 
  echo "ne match pas"
fi


Poste le Monday 14 April 2008 15:21:45
Répondre     Citer    
Re: [Shell] test du format du contenu d'une variable
Envoyé par: Sve@r

verif=`echo $var |sed -e "s/[0-9]//g" -e "s/[a-z]//g" -e "s/[A-Z]//g"`
test -z "$verif" && echo "Saisie incorrecte" || echo "saisie correcte"

L'homme qui murmurait à l'oreille des pingouins
[fr.lang.free.fr]

Poste le Tuesday 15 April 2008 12:00:09
Répondre     Citer    
Re: [Shell] test du format du contenu d'une variable
Envoyé par: Sve@r

Citation
Sve@r
verif=`echo $var |sed -e "s/[0-9]//g" -e "s///g"
-e "s///g"`
test -z "$verif" && echo "Saisie
incorrecte" || echo "saisie correcte"

L'homme qui murmurait à l'oreille des pingouins

C'est "test -s" et non "test -z" qu'il faut écrire (désolé) => si la chaine n'est pas vide c'est que certains caractères n'ont pas été remplacés donc qu'ils étaient en trop

Maintenant il me semble que ton $2 doive être impérativement un nombre réel c'est à dire un nombre précédé ou pas d'un moins suivi éventuellement d'un point et éventuellement d'un nombre => il suffit de supprimer tous les chiffres, le premier point et le moins situé en début de ligne et regarder s'il reste quelque chose...

#!/bin/sh
verif=`echo $2 |sed -e "s/[0-9]//g" -e "s/\.//" -e "s/^-//"`
test -s "$verif" && echo "$2 n'est pas un nombre" || echo "$2 est un nombre"

L'homme qui murmurait à l'oreille des pingouins
[fr.lang.free.fr]

Poste le Tuesday 15 April 2008 12:08:18
Répondre     Citer    

Veuillez vous authentifier auparavant pour commenter.

 

Ce forum !
[Shell] test du format du contenu d'une variable
Pour poser vos questions sur les scripts shell, le Perl, le C, etc... Attention : nous ne sommes pas des spécialistes du dev, ce forum est juste pour de petites aides ponctuelles concernant le développement et les outils de développement.

Sauf mention contraire, les documentations publiées sont sous licence Creative-Commons