我想在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
...
但不是这些版本有效。 你如何正确地写出这样的条件?
此致
答案 0 :(得分:7)
您尝试的各种示例都不起作用,因为在您尝试的任何变体中都没有实际发生算术运算。
你可以说:
if [[ $index -lt $((max_num-1)) ]]; then
echo yes
fi
$(( expression ))
表示Arithmetic Expression。
[[ expression ]]
是Conditional Construct。
答案 1 :(得分:2)
Portably(普通sh
),你可以说
if [ "$index" -lt "$((max_num-1))" ]; then
echo yes
fi
短版
[ "$index" -lt "$((max_num-1))" ] && echo yes;
[
是test
计划,但在被称为]
时需要结束[
。请注意变量所需的引用。使用冗余和不一致的bash扩展名([[ ... ]]
)时不需要引用。
答案 2 :(得分:2)
在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