Как избежать синтаксической ошибки при отсутствии аргументов командной строки?
Пример сценария оболочки:
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