如何比较一个variables与variables减去一个常量在Linux shell脚本?

我想在Linux shell脚本中将一个variables与另一个variables减一个常量进行比较。

在cpp中,这看起来像这样:

int index = x; int max_num = y; if (index < max_num - 1) { // do whatever } else { // do something else } 

在shell中我尝试了以下内容:

  index=0 max_num=2 if [ $index -lt ($max_num - 1) ]; then sleep 20 else echo "NO SLEEP REQUIRED" fi 

我也试过:

 if [ $index -lt ($max_num-1) ]; then ... if [ $index -lt $max_num - 1 ]; then ... if [ $index -lt $max_num-1 ]; then ... 

但不是这些版本的作品。 你如何正确地写这样的条件?

问候

您尝试的各种示例都不起作用,因为在您尝试的任何变体中都没有发生算术运算。

你可以说:

 if [[ $index -lt $((max_num-1)) ]]; then echo yes fi 

$(( expression ))表示算术表达式 。

[[ expression ]]是一个有条件的构造 。

bash ,可读的算术命令是可用的:

 index=0 max_num=2 if (( index < max_num - 1 )); then sleep 20 else echo "NO SLEEP REQUIRED" fi 

严格符合POSIX标准的等价物是

 index=0 max_num=2 if [ "$index" -lt $((max_num - 1)) ]; then sleep 20 else echo "NO SLEEP REQUIRED" fi 

可以说,(平淡的)你可以说

 if [ "$index" -lt "$((max_num-1))" ]; then echo yes fi 

简洁版本

 [ "$index" -lt "$((max_num-1))" ] && echo yes; 

[test程序,但需要关闭]当被称为[ 。 注意需要引用变量。 使用冗余和不一致的bash扩展名cruft( [[ ... ]] )时不需要引用。