【问题标题】:Bash command line arguments, replacing defaults for variablesBash 命令行参数,替换变量的默认值
【发布时间】:2013-04-25 13:03:00
【问题描述】:

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

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

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

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

How do I parse command line arguments in Bash?

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

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

Override a variable in a Bash script from the command line

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

【问题讨论】:

  • 您可以为此目的使用getopts。有很多教程,像aplawrence.com/Unix/getopts.html 这样的教程可以作为开始使用。
  • 谢谢,我在链接的问题上看到了这一点。我想知道是否有一些标准方法可以让命令参数覆盖变量。例如,在 python 中定义函数时,可以设置默认值。我可以看到,通过 if 检查,我可以用命令行参数替换默认值,但不确定是否有这样做的标准方法?

标签: bash variables command-line-arguments default


【解决方案1】:

您可以通过以下方式进行操作。请参阅 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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

    • 我想过这个,但是我正在编辑的脚本是为那些比我更不熟悉的人准备的。我想让它尽可能简单,我认为命令行参数是他们更熟悉的东西。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-16
    • 2017-05-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多