我正在编写一个bash脚本,它接受多个输入变量(最多7个),但只有前4个是必需的。 其余3个是可选的,并且已经在脚本中设置,除非在从终端提示符调用脚本时指定。
当我想只更改一个可选变量时,我的问题出现了。例如,如果我想更改第7个变量,我还必须记下第5和第6个变量值,否则脚本会认为这是第5个参数,当然不是第7个参数。我怎么能这样做?
以下是我的脚本现在的部分示例:
#!/bin/bash
tstart=$1
tstop=$2
coord1=$3
coord4=$4
optional1=${5:-100}
optional2=${6:-50000}
optional3=${7:-4}
...
调用脚本时,如果我想更改变量optional3,我还要编写optional1和optional2的vaules。有没有类似的方式:
$ myscript.sh var1 var2 var3 var7=vaule_7
(类似于你在python中对函数中的默认变量值所做的)
非常感谢!!!
佩尔。
答案 0 :(得分:1)
排序。首先,更改脚本,使其使用环境变量代替可选参数的位置参数。
#!/bin/bash
tstart=$1
tstop=$2
coord1=$3
coord4=$4
: ${optional1:=100}
: ${optional2:=50000}
: ${optional3:=4}
要使用三者中任何一个的值调用脚本,在之前使用作业进行调用:
$ optional3=value_7 myscript.sh var1 var2 var3 var4
您可以设置一个shell选项,其中任何参数看起来像一个赋值将被视为与命令前环境修饰符相同。
$ set -k
$ myscript.sh var1 var2 var3 var4 optional3=value_7
答案 1 :(得分:0)
如果您希望脚本中的参数位置不重要,您可能需要考虑这种方法,您可以将它们命名,然后解析列表以将参数分配给正确的变量。
例如你可以这样:
while [ $# -gt 0 ]; do
case $1 in
-strt) tstart=$2 ; shift ;;
-stp) tstop=$2 ; shift ;;
-crd1) coord1=$2 ; shift ;;
-crd4) coord4=$2 ; shift ;;
-opt1) optional1=$2 ; shift ;;
-opt2) optional2=$2 ; shift ;;
-opt3) optional3=$2 ; shift ;;
(*) echo "$0: error - unrecognized option $1" 1>&2;;
esac
shift
done
'我要做的是读取位置1中的参数以了解它对应的情况和赋值给变量的值2,然后将所有参数从1移到左边,你在案例均值之外有另一个移位位置3中的参数现在位于位置1,参数4现在位于位置2,依此类推,直到您用完要分配的参数。
然后,您可以使用如下所示的内容调用脚本:
myscript.sh -strt var1 -stp var2 -crd1 var3 -crd4 val4 -opt3 val7
你有4个强制参数加上你的第3个可选参数,你可以按任意顺序输入