Geralmente, uso a expansão do parâmetro "Indicar erro se nulo ou desabilitado" para garantir que os parâmetros sejam especificados. Por exemplo:
#!/bin/sh
var1="${1:?[Please specify the first number to add.]}"
var2="${2:?[Please specify the second number to add.]}"
O que então faz isso:
% ./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.]
Na página de manual :
${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.