Назад | Перейти на главную страницу

Как избежать синтаксической ошибки при отсутствии аргументов командной строки?

Как избежать синтаксической ошибки при отсутствии аргументов командной строки?

Пример сценария оболочки:

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

Вывод :

shell>sh shelltest 2 3
2
3
5

Вывод :

    shell>sh shelltest
expr: syntax error

Поскольку аргументы не передаются, как я могу избежать этого и передать собственное сообщение вместо «expr: syntax error»?

Я обычно использую раскрытие параметра «Указать ошибку, если Null или Unset», чтобы гарантировать, что параметры указаны. Например:

#!/bin/sh
var1="${1:?[Please specify the first number to add.]}"
var2="${2:?[Please specify the second number to add.]}"

Что затем делает это:

% ./test.sh
./test.sh: 2: ./test.sh: 1: [Please specify the first number to add.]
% ./test.sh 1
./test.sh: 3: ./test.sh: 2: [Please specify the second number to add.]

Из справочная страница:

 ${parameter:?[word]}  Indicate Error if Null or Unset.  If parameter is
                       unset or null, the expansion of word (or a message
                       indicating it is unset if word is omitted) is
                       written to standard error and the shell exits with
                       a nonzero exit status.  Otherwise, the value of
                       parameter is substituted.  An interactive shell
                       need not exit.

Вы можете проверить отсутствующий аргумент в сценарии оболочки, используя $# переменная.

Например:

#!/bin/bash
#The following line will print no of argument provided to script
#echo $#
USAGE="$0 --arg1<arg1> --arg2<arg2>"

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