2017-10-11 2 views
0

comme je l'ai expliqué dans le titre, j'ai besoin de mettre fin à l'exec. de mon script si la valeur d'entrée n'est pas un nombre entier. Im obtenir le nombre d'un paramètre positionnel. Voici le code:Comment terminer mon script si je n'obtiens pas une valeur entière attendue? - BASH Shell Script

a=9 
kb=0 
var=$2 
var=${var:3:1} 
if [ ${#2} -ne 4 ] 
then 
    echo "ethN is wrong" 
    exit 1 
fi 
if [ "$var" -gt 10 -o "$var" -lt 0 ] 
then 
    echo "N is wrong" 
    exit 1 
else 
    echo "N is ok" 
fi 

quand j'utiliser cette entrée:

bash lartc.sh -i eth #

ne termine mon scénario et je le veux parce que la "#" de eth # n'est pas un nombre entier et c'est ce que je veux qu'il fasse. (par exemple, une entrée valide: eth2, eth3, etc ...). Cependant, mon terminal me dit que "#" était censé être un int. Je valide la longueur et que le nombre doit être entre 0-9, j'ai juste besoin de valider le type de celui-ci. Des idées? Je vous remercie!

Répondre

0

Utilisez l'opérateur =~ pour savoir si N est un nombre entier positif ou non.

stringA =~ regexp stringA correspond à l'expression rationnelle d'expression régulière étendue. Seulement disponible dans bash version 3.0 et plus tard. Peut seulement être utilisé à l'intérieur [[...]]. L'opérateur de correspondance = ~ Expression régulière n'a plus besoin d'indiquer le du motif dans [[...]]. http://tldp.org/LDP/abs/html/bashver3.html

var=${var:3} 

if [[ ! $var =~ ^[1-9][0-9]*$ ]] 
then 
    echo "ethN is wrong" 
    exit 1 
fi 
+0

Merci à tous pour me aider, j'étais un peu occupé avec l'université, c'est pourquoi je répondre maintenant, mais je ne l'utilise vos suggestions! Celui-ci a très bien fonctionné pour moi. (J'ai aussi testé celui que l'utilisateur Quinn a dit et ça a marché aussi) Merci à tous, on garde rockin! lml –

0

Si vous voulez juste pour valider le N dans une certaine position est un entier, l'approche suivante devrait être bon:

#! /bin/sh 
var=$2 
result=$(echo ${var} | grep -E "eth[0-9]") 

if [ -z "${result}" ]; then 
    echo "N is wrong" 
    exit 1 
else 
    echo 'N is ok' 
fi 
0

Si vous utilisez bash, pourquoi ne pas simplement tester contre [[ $2 =~ "^eth[0-9]$" ]]? Si cela est vrai, vous savez:

  • L'entrée a quatre caractères en raison de ^ et $
  • Les trois premières lettres sont eth
  • Le dernier est un chiffre

Qu'allez-vous faire si quelqu'un exécute cela sur un Linux systemd et essaie de faire correspondre enp4s0? : P