Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 13/11/2012, à 05:50

touttou

tester si une valeur est numérique dans un script shell

Bonjour tout le monde,
j'ai essayé de faire un script qui teste si une variable est numérique(est composé éventuellement d'un signe suivi de chiffres uniquement).
c'est ce que j'ai écrit:

#!/bin/bash
#fonction qui renvoie vrai quand l'argument qui lui est passé en paramètre est un nombre (positif ou négatif)
function isnum {
    echo "$1" | egrep -q '^[-+]?[0-9]+$'
}
isnum 

mais il m'affiche toujours

./in.bash:ligne3: Erreur de syntaxe près du symbole innatendu <<echo>>
./in.bash:ligne3:`echo "$1" | egrep -q '^[-+]?[0-9]+$''

Merci d'avance

edit modo : merci de choisir des titres explicites

Dernière modification par nesthib (Le 13/11/2012, à 08:11)

Hors ligne

#2 Le 13/11/2012, à 06:51

Hizoka

Re : tester si une valeur est numérique dans un script shell

    echo "$1" | egrep -q '^[-+]?[0-9]+$'

il existe des vérifications pour faire ça en bash...

if [[ "${1}" =~ ^[-+]?[0-9]+$ ]]
then
  echo "ok"
else
  echo "pas bon"
fi

ou en plus court

[[ "${1}" =~ ^[-+]?[0-9]*$ ]] && echo "ok"

et si tu as besoin de retourner une valeur : return [la valeur (0 ou 1 par exemple)]

[[ "${1}" =~ ^[-+]?[0-9]*$ ]] && return 0 || return 1

echo "${?}"
=> 0 ou 1

http://abs.traduc.org/abs-fr/

Et soit un peu plus precis dans le titre de ton topic afin que ce soit explicite smile

Dernière modification par Hizoka (Le 13/11/2012, à 06:53)


KDE Neon 64bits
Tous mes softs (MKVExtractorQt, HizoSelect, HizoProgress, Qtesseract, Keneric, Services menus...) sont sur github

Hors ligne

#3 Le 13/11/2012, à 06:59

pingouinux

Re : tester si une valeur est numérique dans un script shell

Bonjour,
Ton script ne donne pas d'erreur chez moi.

Remarques :

  • Appeler isnum avec un paramètre

    isnum "$1"
  • Tu peux simplifier un peu :

    egrep -q '^[-+]?[0-9]+$' <<<"$1"

Hors ligne