Bonjour
j ai une fonction qui crashe si je lui passe un argument non entier. Je voudrais ajouter un test pour m'avertir aund le type du premier argument n'est pas entier.
??Code:
1
2
3 if $1 ...... then exit
Merci
Version imprimable
Bonjour
j ai une fonction qui crashe si je lui passe un argument non entier. Je voudrais ajouter un test pour m'avertir aund le type du premier argument n'est pas entier.
??Code:
1
2
3 if $1 ...... then exit
Merci
Quelque chose comme ça ?
Code:
1
2
3
4 if [[ $1 == +([0-9]) ]] then ... est entier... fi
utiliser les type sets permet d'éviter de tester les valeurs après leur entrées ce qui interdit donc toute erreur de détection potentielle.
man bash
man ksh
j'ai essayé :
typeset -i $1="99999999"
ca ne marche pas.. erreur de syntaxe?
oui oui je viens de le faire comme ceci
il fallait donc declarer une variable puis l'utiliser en tant que telle dans ma fonction
Le problème, c'est que si je lui rentre un non entier, il le convertit à zéro et continue le traitement, alors aue je veux au'il sorte (sans oublier aussi le fait que je peux avoir besoin du zéro)
je me suis peut être mal exprimé.
Quand j'utilisetout se passe bien, sauf que si j'appelle ma fonction ainsi : (shell biensur)Code:typeset -i mavariable=$1
" mafonction eeee ", je n'ai pas de message d'erreur, mais plutot la fonction s'exécute normalement comme ci je l'ai appelé ainsi : " mafonction 0"
C'est au moment de l'affectation qu'une erreur est générée ou non
Il faut donc tester le code retour de l'affectation
Le test et l'affectation peuvent être regroupésCode:
1
2
3
4
5
6
7
8 typeset -i mavariable mavariable=$1 if [ $? -eq 0 ] then echo $1 est un entier else echo $1 n'est pas un entier fi
Code:
1
2
3 typeset -i mavariable if mavariable=$1 # ceci est une affectation, pas un test d'égalité ! then ...
Bah pour faire plus simple,
il y'a l'option -n qui permet de tester si un arg est un entier.
Code:
1
2
3
4
5
6 if [ -n "$arg" ] ; then echo "OK" else echo "KO" fi
d'abord, le -n ne marche pas... il s'agit de tester si la longueur de la chaine donnée en argument est nulle ou pas, et je ne sais pas ou est ce que t'as trouvé ça, mais je suis preneur s'il s'avère vrai (en tout cas j'ai testé et ça ne marche pas)
sinon, le problème avec
c'est que j'ai besoin du Zero.. c'est ce aue j'ai essayé d'expliquer la première fois, sinon, oui c'est trivial de faire un petit test comme celui là.Code:
1
2
3
4
5
6 if [ $? -eq 0 ] then echo $1 est un entier else echo $1 n'est pas un entier fi
Merci
$? contient la valeur de retour de la dernière commande exécutée, ici l'affectation, pas la valeur de la variable
c'est pas au moment de l'affectation que l'erreur est générée..
en fait, lors de l'affectation, le typeset va forcer une argument non entier à zéro... du coup y a pas d'erreur générée..
je vois ou tu veux en venir, mais je ne crois pas que c'est ce qu'il me faut.. sous réserve que j'ai compris biensur...
sinon, publicvoidmain... je ne comprends pas ce que tu dis.. je crois que tu t'es un peu égaré dans le sujet, non?
et merci, je sais utiliser man :lol:
En effet, je me suis trompé et je m'en excuse.
Je croyais que l'option -n permettait de tester si un arg était un entier. Quand j'ai lu le man de bash ou man test, apparemment il y'a pas d'options qui permet de le tester. En fait , j'ai trouvé un autre moyen pour tester si un argument est un entier :
Je teste la valeur de retour du grep. Si ca vaut zero, on affiche "OK" ou sinon on affiche "KO"Code:
1
2
3
4
5
6 if `echo "$arg" | grep "[+|-][123456789]"` ; then echo "OK" else echo "KO" fi
J'espere que ca peut t'aider. :D