2 votes

Comment éviter une erreur de syntaxe sur des arguments de ligne de commande manquants ?

Comment éviter une erreur de syntaxe sur des arguments de ligne de commande manquants?

Exemple de script shell:

 var1=$1;
 var2=$2;
 echo $var1
 echo $var2
 var3=`expr $var1 + $var2`;
 echo $var3

Sortie :

shell>sh shelltest 2 3
2
3
5

Sortie :

    shell>sh shelltest
expr: erreur de syntaxe

Comme aucun argument n'est passé, comment puis-je éviter cela et afficher mon propre message au lieu de "expr: erreur de syntaxe"?

4voto

Abhijeet Kasurde Points 975

Vous pouvez vérifier les arguments manquants dans le script shell en utilisant la variable $#.

Par exemple:

#!/bin/bash
#La ligne suivante affichera le nombre d'arguments fournis au script
#echo $#
USAGE="$0 --arg1 --arg2"

if [ "$#" -lt "4" ] 
then 
    echo -e $USAGE;    
else 
    var1=$2;
    var2=$4;
    echo `expr $var1 + $var2`;
fi

4voto

mgorven Points 29736

Je utilise habituellement l'expansion de paramètre "Indiquer une erreur si Null ou non défini" pour m'assurer que les paramètres sont spécifiés. Par exemple:

#!/bin/sh
var1="${1:?[Veuillez spécifier le premier nombre à ajouter.]}"
var2="${2:?[Veuillez spécifier le deuxième nombre à ajouter.]}"

Ce qui donne alors ceci:

% ./test.sh
./test.sh: 2: ./test.sh: 1: [Veuillez spécifier le premier nombre à ajouter.]
% ./test.sh 1
./test.sh: 3: ./test.sh: 2: [Veuillez spécifier le deuxième nombre à ajouter.]

Du manpage:

 ${parameter:?[word]}  Indique une Erreur si Null ou non Défini. Si le paramètre est
                       non défini ou null, l'expansion du mot (ou un message
                       indiquant qu'il n'est pas défini si le mot est omis) est
                       écrit dans la sortie standard d'erreur et le shell se termine avec
                       un statut de sortie non nul. Sinon, la valeur du
                       paramètre est substituée. Un shell interactif
                       n'est pas obligé de se terminer.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X