shell 脚本:如何读取可选参数,如果参数不存在,则使用默认值

9rnv2umw  于 2023-01-26  发布在  Shell
关注(0)|答案(2)|浏览(408)

我想写一个shell脚本,它可以有一个可选参数,如果没有可选参数,那么使用默认值。例如:if sys.argv[1].exists() ip = sys.argv[1] else ip = '10.9.2.16'

wnvonmuf

wnvonmuf1#

我假设您选择了正确的标记,并提交了一个关于Unix/Linux命令行解释器的问题,并且您编写的示例代码是一个伪代码示例,用于解释所需的行为。
manpage for bash的"参数扩展"一节中,它清楚地说明了如何对任何变量(而不仅仅是位置参数)执行此操作:
${参数:-字}

Use Default Values.  If parameter is unset or null, 
   the expansion of word is substituted.
   Otherwise, the value of parameter is substituted.

这也适用于POSIX shell,以及我所知道的shell脚本的所有方言。因此,对于您的示例,您可以使用:

#!/bin/sh
ip=${1:-10.9.2.16}
echo "IP is $ip"

/path/to/script.sh将输出:IP is 10.9.2.16/path/to/script.sh 8.8.8.8将输出:IP is 8.8.8.8.
如果您希望$1是可选的,但希望它后面有其他参数,则可以显式省略第一个参数,并允许它回退到默认值,方法是使用一对引号(单引号或双引号)代替第一个参数来调用脚本。例如,使用以下脚本:

#!/bin/sh
ip=${1:-10.9.2.16}
echo "IP is $ip"
echo "Your second argument is $2"

/path/to/script.sh "" quux那样调用它将输出:

IP is 10.9.2.16
Your second argument is quux
7xzttuei

7xzttuei2#

正如Wilson所评论的,在shell脚本中,你可以使用${parameter:-default}语法来读取一个可选的参数,如果参数不存在,就使用默认值。

optional_arg=${1:-default_value}
echo "The value of the optional argument is: $optional_arg"

这会将变量optional_arg设置为传递给脚本的第一个参数的值($1),如果未提供第一个参数,则设置为默认值“default_value”。
您也可以使用if语句和[ -z“$variable”]来检查变量是否为空。

if [ -z "$optional_arg" ]; then
   optional_arg="default_value"
fi

相关问题