bash命令行参数替换变量的默认值

时间:2013-05-01 14:11:28

标签: bash variables command-line-arguments defaults

我有一个包含多个输入文件的脚本,通常这些是默认存储在标准位置并由脚本调用。

但有时需要使用更改的输入来运行它。

在脚本中我现在说3个变量$ A $ B和$ C,现在我想用非默认的$ B运行它,明天我可能想用非默认的$ A和$ B来运行它。

我已经了解了如何解析命令行参数: How do I parse command line arguments in Bash?

但是我不知道如何在某些时候处理命令行语句的设置?

我没有足够的代表回答我自己的问题,但我有一个解决方案:

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

道歉我显然没有像我想的那样彻底搜索...

2 个答案:

答案 0 :(得分:52)

您可以这样做,请参阅bash手册页中的Shell Parameter Expansion

#! /bin/bash

value=${1:-the default value}
echo value=$value

在命令行上:

$ ./myscript.sh
value=the default value
$ ./myscript.sh foobar
value=foobar

答案 1 :(得分:7)

您也可以在脚本之外设置变量,而不是使用命令行参数来覆盖默认值。例如,可以使用foo=54 /tmp/foobarbar=/var/tmp /tmp/foobar

调用以下脚本
#! /bin/bash
: ${foo:=42}
: ${bar:=/tmp}
echo "foo=$foo bar=$bar"