如何在 bash 脚本的 IF 语句中添加 2 个数字?

如何在 bash 脚本的 IF 语句中添加 2 个数字?

因此,我只是尝试运行一项检查,删除小于或等于当前时间 3 小时的文件夹,但出现“预期的整数表达式”错误。

if [ ${currentFileHour[$i]}+3 -le 19  ]

如果我用 javascript 写它作为一个简单的例子,那就是

if(5 + 6 <= 10){
    console.log('yes')
}

答案1

bash 有一个算术条件结构(参见条件结构在手册中)

if (( "${currentFileHour[$i]}" + 3 <= 19 )); then ...

在 bash 的算术上下文中,您可以省略$,对于数组元素来说,它看起来像:

if (( currentFileHour[$i] + 3 <= 19 )); then ...

假设这是一个索引数组,索引是算术索引,所以

if (( currentFileHour[i] + 3 <= 19 )); then ...

演示:

$ i=10
$ currentFileHour[i]=16
$ if (( currentFileHour[i] + 3 <= 19 )); then echo yes; fi
yes

关于小时(以及分钟和秒等)需要注意的一件事是无效的八进制数:

$ currentFileHour[i]="08"
$ if (( currentFileHour[i] + 3 <= 19 )); then echo yes; fi
bash: ((: 08: value too great for base (error token is "08")

前导零使 bash 认为您需要八进制。

为了解决这个问题:

  • 对于该date命令,使用%_Hwhich 填充空格而不是零,或者%-Hwhich 不填充单位数小时,或者
  • 告诉 bash 算术它是一个以 10 为底的数字,带有“10#”前缀($在本例中需要)
    $ if (( 10#${currentFileHour[i]} + 3 <= 19 )); then echo yes; fi
    yes
    

相关内容