测试IF语句中的可选参数

时间:2017-03-02 11:44:31

标签: bash

在bash脚本中,我进行了此测试。这非常有效。

Stepper 0 clicked. Its value 1.0
Stepper 1 clicked. Its value 1.0
Stepper 0 clicked. Its value 2.0
Stepper 0 clicked. Its value 3.0
Stepper 3 clicked. Its value 1.0

现在我想允许第三个参数强制。但无论价值如何,测试通过:

function copy_to_server {
  if [ $1 -nt limit ]; then

如何正确测试我的参数?

1 个答案:

答案 0 :(得分:1)

您需要包含空格:

if [ "$1" -nt limit ] || [ "$3" = "-f" ] || [ "$3" = "--force" ]; then

如果不这样做,shell会将测试内部视为单个参数,并且通过规范,使用单个参数,测试将返回" true" (0)如果参数不为空。

另外,请注意我在第一个测试中引用了$1:如果传递的参数包含空格,则不会引用单词拆分,并且shell将看到三个以上的参数并且语法失败错误(或者至少不做你想做的事。)

如果您不介意使用特定于Bash的语法,则可以使用[[ ]]类型的测试,该测试不执行分词。

if [[ $1 -nt limit ]] || [[ $3 = -f ]] || [[ $3 = --force ]]; then

但是,到那时,你可以把它们放在一个单独的测试中,因为这种测试方式也支持逻辑运算符:

if [[ $1 -nt limit || $3 = -f || $3 = --force ]; then

请注意,=测试中的!=[[ ]]运算符会进行通配,因此如果正在测试的字符串包含可触发glob的内容,则需要引用右侧(比如*)。