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 

道歉,我显然没有那样彻底,因为我以为搜索...

+4

您可以使用'getopts'来达到此目的。有许多教程,像http://aplawrence.com/Unix/getopts.html可以用于一开始。 – fedorqui 2013-05-01 14:13:14

+0

谢谢,我在关联的问题上看到了这一点。 我想知道是否有一些标准的方法来让命令参数覆盖变量。例如,当在python中定义函数时,可以设置一个默认值。 我可以看到,如果检查,我可以用命令行参数替换默认值,但不确定是否有一个标准的方式做到这一点? – Lanrest 2013-05-01 14:48:28

除了使用命令行参数来覆盖默认值外,您还可以在脚本之外设置变量。例如,下面的脚本可以foo=54 /tmp/foobarbar=/var/tmp /tmp/foobar调用:

#! /bin/bash 
: ${foo:=42} 
: ${bar:=/tmp} 
echo "foo=$foo bar=$bar" 
+0

我想过这个,但是我正在编辑的脚本适用于比我自己更不熟悉的人。我想让它尽可能简单,我认为命令行参数是他们更熟悉的东西。 – 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