Test simple

Résolu
moreje -  
zipe31 Messages postés 36402 Date d'inscription   Statut Contributeur Dernière intervention   -
Bonjour,

j'essaye un script bash ou je recupere et veux tester un argument optenu par getopts

MYVAR=$OPTARG 
echo ${MYVAR} 
if [[ "$MYVAR" == [:digit:] ]] then 
echo $MYVAR  is number 
exit 1 
else echo $MYVAR  is not number 
fi


mon probleme, c'est que si je mets '17' comme argument dans ma commande mon code me sort:

17 is not number 


une idée sur ce que je fais mal?
a terme, je voudrais pouvoir entrer une array de nombres en argument : '17 5 12 25'
Merci!


A voir également:

4 réponses

zipe31 Messages postés 36402 Date d'inscription   Statut Contributeur Dernière intervention   6 431
 
Salut,

Pour une classe définie, il faut des doubles crochets "[[:digit:]]".
Ensuite si le then est sur la même ligne que le "if" il faut le séparer par un point virgule :
 if [[ "$MYVAR" == [[:digit:]] ]] ; then ...

1
moreje2lyon Messages postés 21 Date d'inscription   Statut Membre Dernière intervention  
 
Merci...
malheureusement, malgré l'ajout des doubles ]
j'ai toujours
17 is not number
0
zipe31 Messages postés 36402 Date d'inscription   Statut Contributeur Dernière intervention   6 431
 
On peut voir ton script complet ?
0
zipe31 Messages postés 36402 Date d'inscription   Statut Contributeur Dernière intervention   6 431
 
Oups, j'avais pas fait attention au signe "==" ;-\

Il faut le remplacer par "=~"
0
moreje2lyon Messages postés 21 Date d'inscription   Statut Membre Dernière intervention  
 
voilà:

#!/bin/bash 

while getopts ":l:" opt; do 
  case $opt in 
    l) 
      echo "-l actif: les labels selectionnés sont: $OPTARG" >&2 
      MYVAR=$OPTARG 
      echo ${MYVAR} 
        if [[ "$MYVAR" == [[:digit:]] ]] ; then  
        echo "-l: $MYVAR is number" 
        exit 1 
        else echo "${MYVAR} is not number" 
        fi 
      ;; 
    \?) 
      echo "option invalide: -$OPTARG" >&2 
      exit 1 
      ;; 
    :) 
      echo "Option $OPTARG necessite un argument" >&2 
      exit 1 
      ;; 
  esac 
done


et la commande:
moncode -l '17' fichieratraiter
0
zipe31 Messages postés 36402 Date d'inscription   Statut Contributeur Dernière intervention   6 431
 
Voir message #4
0
moreje2lyon Messages postés 21 Date d'inscription   Statut Membre Dernière intervention  
 
super, merci c'est presque bon!
c'est quoi la signification de ce ~ ?

Je dis presque bon, car si le nom de mon fichier a traiter contient un chiffre, et que je lance une commande avec une erreur (oubli de l'argument)
moncode -l fichieratraiter1
le test passe car il trouve un chiffre dans le nom de fichier.
sais tu comment tester pour que l'argument ne contienne QUE des chiffres?
Merci!!
0
Utilisateur anonyme
 
salut,

sans regex :
[[ $v == +([0-9]) ]] && echo "is a number" || echo "is NOT a number"
0
moreje2lyon Messages postés 21 Date d'inscription   Statut Membre Dernière intervention  
 
merci,
mais là je ne suis pas assez familier à cette syntaxe pour l'intégrer dans ma boucle
0
moreje2lyon Messages postés 21 Date d'inscription   Statut Membre Dernière intervention  
 
merci!
existe il la construction inverse à

=~ ^[[:digit:]]*$


pour que le test soit valide quand il n'y a PAS que des chiffres?
merci
0
zipe31 Messages postés 36402 Date d'inscription   Statut Contributeur Dernière intervention   6 431
 
T'enlève le "^" et le "$".
0