Shell

raidouane_1986 -  
jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   -
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
Configuration: Windows XP
Internet Explorer 7.0

4 réponses

  1. raidouane_1986
     
    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
  2. lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 571
     
    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
  3. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
     
    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