我有一个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
答案 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 c
和a 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
两个必需参数位于first
和second
;三个可选参数分别位于optional_a
,optional_b
和optional_c
中。