如何将参数传递给 shell 并检查参数是否不为空

如何将参数传递给 shell 并检查参数是否不为空

我有一小段代码可以说get.sh将日期设置为这样的变量

date=$(date +%b%d%y)

现在我希望能够将自定义日期参数传递给get.sh喜欢

./get.sh --date=2019-01-01

并且在 get.sh 上能够检查是否发送了任何参数,如果没有发送则获取参数,而不是保持原样,就像

if ( isset( dateFromCli ) )
date = datefromCLi
else
date=$(date +%b%d%y

答案1

查看 Bash 手册页上的“特殊参数”。简而言之,您应该能够测试${#}确定提供了多少个命令行参数,以及${1},${2},${3}, ... 使用各个参数值​​。

答案2

对于您的特定问题,如果您使用 Bash,这也可以工作,通过允许您省略构造来稍微缩短您的代码if

currentDate=${dateFromCLI-+%b%d%y}

等号右边的表达式是参数展开的一种特殊形式,其一般形式为:

${variableName-"default value"}

如果定义了该名称下的变量variableName,则整个${}构造将扩展为该变量的值。

但是,如果未定义,则该构造将扩展为默认值,位于文字连字符 ( -) 的右侧。如果一个变量之前被赋值并且之后没有被取消设置,则该变量被认为是已定义的。如果分配了空值,它甚至会被定义。

如果您之前设置dateFromCLI为空值,则可以使用相同的扩展样式,但-替换为:-。在这种情况下,如果定义了命名变量,但具有空值(空字符串),则也会选择默认值:

${variableName:-"default value"}

参考:GNU Bash 参考手册:Shell 参数扩展

相关内容