我想在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( [[ ... ]]
)时不需要引用。