bash命令行参数替换变量的默认值
我有一个具有多个输入文件的脚本,通常这些是默认存储在标准位置并由脚本调用。bash命令行参数替换变量的默认值
但是,有时需要使用更改的输入来运行它。
在脚本中,我现在说3个变量$ A $ B和$ C,现在我想用非默认$ B运行它,明天我可能想用非默认$ A和$ B运行它。
我在如何解析命令行参数周围一看: How do I parse command line arguments in Bash?
但我不知道该如何处理有一些组由命令行aruguments一些的时间呢?
我没有足够的代表来回答我的问题,但是我有一个解决办法:
https://stackoverflow.com/a/4610469/2339623
#!/bin/bash
a=input1
b=input2
c=input3
while getopts "a:b:c:" flag
do
case $flag in
a) a=$OPTARG;;
b) b=$OPTARG;;
c) c=$OPTARG;;
esac
done
道歉,我显然没有那样彻底,因为我以为搜索...
除了使用命令行参数来覆盖默认值外,您还可以在脚本之外设置变量。例如,下面的脚本可以foo=54 /tmp/foobar
或bar=/var/tmp /tmp/foobar
调用:
#! /bin/bash
: ${foo:=42}
: ${bar:=/tmp}
echo "foo=$foo bar=$bar"
我想过这个,但是我正在编辑的脚本适用于比我自己更不熟悉的人。我想让它尽可能简单,我认为命令行参数是他们更熟悉的东西。 – Lanrest 2013-05-01 15:32:23
你能做到这样,看到Shell Parameter Expansion在bash的手册页
#! /bin/bash
value=${1:-the default value}
echo value=$value
在命令行:
$ ./myscript.sh
value=the default value
$ ./myscript.sh foobar
value=foobar
您可以使用'getopts'来达到此目的。有许多教程,像http://aplawrence.com/Unix/getopts.html可以用于一开始。 – fedorqui 2013-05-01 14:13:14
谢谢,我在关联的问题上看到了这一点。 我想知道是否有一些标准的方法来让命令参数覆盖变量。例如,当在python中定义函数时,可以设置一个默认值。 我可以看到,如果检查,我可以用命令行参数替换默认值,但不确定是否有一个标准的方式做到这一点? – Lanrest 2013-05-01 14:48:28