28

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

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

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

我已经查看了如何解析命令行参数:

如何在 Bash 中解析命令行参数?

我如何处理某些时候通过命令行参数设置一些?

我没有足够的声望点来回答我自己的问题。但是,我有一个解决方案:

从命令行覆盖 Bash 脚本中的变量

#!/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

2 回答 2

73

您可以通过以下方式进行。请参阅Bash 手册页上的Shell 参数扩展。

#! /bin/bash

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

在命令行上:

$ ./myscript.sh
value=the default value
$ ./myscript.sh foobar
value=foobar
于 2013-05-30T12:34:37.723 回答
7

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

#! /bin/bash
: ${foo:=42}
: ${bar:=/tmp}
echo "foo=$foo bar=$bar"
于 2013-05-01T14:33:11.007 回答