使用可选的args向shell脚本添加其他参数

时间:2014-02-11 19:10:18

标签: bash shell arguments

我有一个shell脚本,它接受1个必需参数和3个可选参数,我希望通过在不破坏当前设计的情况下再传递一个额外的参数来增强脚本。 也就是说,如果我的参数是n并且现有参数是a和b c,则以下内容应该起作用

./script.sh a b c d n
./script.sh a n
./script.sh a b n
./script.sh a b c n

2 个答案:

答案 0 :(得分:1)

您可以检查最后一个参数是否为n。如果是这样,将其从参数列表中删除并将其余部分添加到数组中,否则将所有参数添加到数组中。

if [[ "${@: -1}" = n ]]; then
  for j in "${@:1:$(($#-1))}"; do
    var+=($j)
  done
else
  for j; do
    var+=($j)
  done
fi

echo "${var[@]}"

这会产生:

a b c

当脚本的参数为a b ca b c n时。

答案 1 :(得分:0)

不优雅,但很简单:

case $# in
    0|1) printf >&2 "Too few arguments\n"; exit 1
         ;;
    2) first=$1
       second=$2
       ;;
    3) first=$1
       optional_a=$2
       second=$3
       ;;
    4) first=$1
       optional_a=$2
       optional_b=$3
       second=$4
       ;;
    5) first=$1
       optional_a=$2
       optional_b=$3
       optional_c=$4
       second=$5
       ;;
    *) printf >&2 "Too many optional arguments\n"; exit 1
       ;;
esac

两个必需参数位于firstsecond;三个可选参数分别位于optional_aoptional_boptional_c中。