Shell

Fermé
raidouane_1986 - 26 oct. 2008 à 02:05
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 - 26 oct. 2008 à 11:48
Bonsoire,
Svp j'ai un problème pour tester si un nombre (que vous lisez à partir de l’entrée standard) est un numérique sous linux.jai tester ce code la :

# !/bin/bash
echo "donner un nombre svp"
read i
if ($i < 048 -a $i > 057)
then
echo "le $i n'est pas un numérique"
else
echo "$i est un numérique"
fi

Mais le terminale affiche toujours ce que je tapé est un numérique :
redouane-pardus redouane # chmod u+x ex2_2
redouane-pardus redouane # ./ex2_2
donner un nombre svp
h
./ex2_2: line 4: 048: Aucun fichier ou dossier de ce type
h est un numerique

Svp qlq me guider et merci en avance
A voir également:

4 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 895
26 oct. 2008 à 09:00
Salut,

Voir dans la FAQ : Tester une variable numérique

Voir aussi cette discussion
0
raidouane_1986
26 oct. 2008 à 11:28
bonjour,
merci pour votre reponse,mais vous voulez me donnez le commentaire de ses 2 lignes de ce programme pour bien comprendre .

#!/bin/sh
# script_let.sh
var=$1

if let $var 2>/dev/null
then
echo "$var numérique"
else
echo "$var non numérique"
fi


les lignes sont :
# script_let.sh !!!
et
let $var 2>/dev/null !!!!

est vraiment mercii bcp.merci en avance
0
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 567
26 oct. 2008 à 11:42
Salut,

2>/dev/null
permet de ne pas afficher les messages d'erreur à l'écran (STDERR - sortie erreur)

Par erreur tu peux par exemple tester si 2a est numérique ou pas

En ce cas shell envoie un message d'erreur (voir en gras) sur STDERR

lami20j@debian:~/trash$ cat ccm.sh
#!/bin/sh
var=$1

if let $var
then
echo "$var numérique"
else
echo "$var non numérique"
fi
lami20j@debian:~/trash$ sh ccm.sh 2
2 numérique
lami20j@debian:~/trash$ sh ccm.sh aa
aa non numérique
lami20j@debian:~/trash$ sh ccm.sh 2a
ccm.sh: line 4: let: 2a: value too great for base (error token is "2a")
2a non numérique

Cette erreur n'est pas affichée si on utilise 2>/dev/null
lami20j@debian:~/trash$ cat ccm.sh
#!/bin/sh
var=$1

if let $var 2>/dev/null
then
echo "$var numérique"
else
echo "$var non numérique"
fi
lami20j@debian:~/trash$ sh ccm.sh 2
2 numérique
lami20j@debian:~/trash$ sh ccm.sh a
a non numérique
lami20j@debian:~/trash$ sh ccm.sh 2a
2a non numérique

0
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 895
26 oct. 2008 à 11:48
Re-

# script_let.sh
Un dièse (#) en début de ligne signifie que la ligne est un commentaire et quelle ne sera pas interprétée par le shell.
Dans ce cas présent c'est une façon de présenter le script (son nom)


let $var 2>/dev/null
La commande "let" déclare une variable de type "entier" et de ce fait renvoie un code retour égal à "0" (vrai) si c'est le cas et un code retour égal à 1 (faux) dans le cas contraire, ce que vérifie le "if...then...else".
Le "2>/dev/null" n'est là que pour envoyer d'éventuels messages d'erreurs dans les oubliettes plutôt que sur la sortie standard (l'écran).

0