[shell] type d'une variable ??
younes
-
jipicy Messages postés 41342 Statut Modérateur -
jipicy Messages postés 41342 Statut Modérateur -
comment puis je savoir le type d'une variable saisie par le clavier :
echo "donner x :"
read x
quel est le type de x ??
& merci
ou bien tt simplement comment puisje verifier qu'une variable est numerique ? merci encors
echo "donner x :"
read x
quel est le type de x ??
& merci
ou bien tt simplement comment puisje verifier qu'une variable est numerique ? merci encors
A voir également:
- [shell] type d'une variable ??
- Classic shell - Télécharger - Personnalisation
- Clear type - Guide
- Type de ram - Guide
- Vba range avec variable ✓ - Forum VB / VBA
- Classic shell c'est quoi ✓ - Forum Windows 10
5 réponses
Salut,
#!/bin/sh
expr $var + 0 1>/dev/null 2>&1; statut=$?
if test $statut -lt 2
then
echo "$var" numérique
filami20j
Les variables n'ont pas de types en shell (en fait ce sont toutes des chaines).
Le mieux c'est de tester avec une expression régulière par exemple avec sed.
Bonne chance
Le mieux c'est de tester avec une expression régulière par exemple avec sed.
Bonne chance
Salut,
j'ai savais de l'existence de la variable $? du shell (et l'idée de tester le rétour d'une addition d'une chaîne avec un nombre m'a traversée l'esprit), mais j'étais au boulot, je n'avais pas la possibilité de tester.
Donc j'ai cherché sur net (j'ai l'habitude ;-)) et j'ai trouvé ce code dans un forum :-))
lami20j
j'ai savais de l'existence de la variable $? du shell (et l'idée de tester le rétour d'une addition d'une chaîne avec un nombre m'a traversée l'esprit), mais j'étais au boulot, je n'avais pas la possibilité de tester.
Donc j'ai cherché sur net (j'ai l'habitude ;-)) et j'ai trouvé ce code dans un forum :-))
lami20j
Je trouve aussi ;-))
Sinon on peut faire avec "grep" :
Sinon on peut faire avec "grep" :
if [ "$(echo $var | grep "^:digit:*$")" ]; then echo "La chaîne est numérique"; fiJ'avais aussi ça dans mes tablettes :
[ $var -eq 0 ] 2> /dev/null if [ $? -eq 0 -o $? -eq 1 ] then echo "La chaîne est numérique" fi;-))
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
;-\
Script avec "grep" :
Avec "test" ([ ]):
Script avec "grep" :
[jp@MDK tmpfs]$ cat essai_grep.sh #!/bin/bash # essai_grep.sh var=$1 if [ "$(echo $var | grep "^:digit:*$")" ] then echo "La chaîne est numérique" fi [jp@MDK tmpfs]$ ./essai_grep.sh 123 La chaîne est numérique [jp@MDK tmpfs]$ ./essai_grep.sh 123a [jp@MDK tmpfs]$ ./essai_grep.sh k123a [jp@MDK tmpfs]$ ./essai_grep.sh azerty [jp@MDK tmpfs]$ ./essai_grep.sh azerty12 [jp@MDK tmpfs]$ ./essai_grep.sh 1 La chaîne est numérique [jp@MDK tmpfs]$
Avec "test" ([ ]):
[jp@MDK tmpfs]$ cat essai_test.sh #!/bin/bash # essai_test.sh var=$1 [ $var -eq 0 ] 2> /dev/null if [ $? -eq 0 -o $? -eq 1 ] then echo "La chaîne est numérique" fi [jp@MDK tmpfs]$ ./essai_test.sh 123 La chaîne est numérique [jp@MDK tmpfs]$ ./essai_test.sh azerty [jp@MDK tmpfs]$ ./essai_test.sh aze123rty [jp@MDK tmpfs]$ ./essai_test.sh 123azerty [jp@MDK tmpfs]$ ./essai_test.sh 1 La chaîne est numérique [jp@MDK tmpfs]$J'ai pas de soucis ;-))
Re,
je ne sais pas pour quel raison chez moi ça ne marche pas.
que toi, tu n'as pas de soucis, c'est normal, c'est toi le maître:-)
En revanche je propose (ah, oui Miss, cette fois c'est ma solution :-)), je vais arrêter le plagiat :-))
je ne sais pas pour quel raison chez moi ça ne marche pas.
que toi, tu n'as pas de soucis, c'est normal, c'est toi le maître:-)
En revanche je propose (ah, oui Miss, cette fois c'est ma solution :-)), je vais arrêter le plagiat :-))
#!/bin/sh var=$1 if let $var 2>/dev/null then echo "$var numérique" else echo "$var non numérique" filami20j
J'ai trouvé pourquoi ça ne marche pas chez toi, tout simplement parce que le (nouveau) formatage des pages sur CCM m'efface mes "doubles crochets" (ouvrants et fermants) autour de l'expression :
;-))
[ [:digit:] ]Évidemment il ne faut pas d'espace entre les deux crochets et du coup l'expression dans le script doit ressembler à :
if [ "$(echo $var | grep "^[ [:digit:] ]*$")" ]toujours sans les espaces entre les crochets...
;-))