Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 使用可选参数向shell脚本添加附加参数_Bash_Shell_Arguments - Fatal编程技术网

Bash 使用可选参数向shell脚本添加附加参数

Bash 使用可选参数向shell脚本添加附加参数,bash,shell,arguments,Bash,Shell,Arguments,我有一个shell脚本,它接受1个强制参数和最多3个可选参数,我希望通过能够在不破坏当前设计的情况下再传递一个额外参数来增强脚本。 也就是说,如果我的参数是n,现有的参数是a和b,c和d,那么下面应该可以 ./script.sh a b c d n ./script.sh a n ./script.sh a b n ./script.sh a b c n 不优雅,但直截了当: case $# in 0|1) printf >&2 "Too few arguments\n"

我有一个shell脚本,它接受1个强制参数和最多3个可选参数,我希望通过能够在不破坏当前设计的情况下再传递一个额外参数来增强脚本。 也就是说,如果我的参数是n,现有的参数是a和b,c和d,那么下面应该可以

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

不优雅,但直截了当:

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

两个必需的参数位于
第一个
第二个
中;这三个可选参数分别位于
optional\u a
optional\u b
optional\u c
中。

您可以检查最后一个参数是否为
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

当脚本的参数为
abc
abcn

确定时。您当前的设计是什么?a1=$1 a2=$2 a3=$3 a4=$4 var=($a1$a2$a3$a4)对于${var[*]}@sudeep中的i,使用
“${var[@]}”
迭代数组--
${var[*]}
连接成标量,然后字符串拆分并用glob展开它…要了解这在实践中的含义,请尝试用
“两个字”传递一个参数
。怎么样:
var=(“$@”)
——然后您可以拥有所需的任意多个参数。