Shell

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. 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
    1. Modérateur
      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
      

      1. Modérateur
        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).