繁体   English   中英

如何在linux shell脚本中将变量与变量相比减去常量?

[英]How to compare a variable with a variable minus a constant in a linux shell script?

我想比较一个变量与另一个变量减去linux shell脚本中的常量。

在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 ]]是一个条件构造

便携(普通sh ),你可以说

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

精简版

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM