如何比较Bash中的数字或者整数
作为系统管理员,我们可能会遇到许多此类要求,在这些要求中,我们将需要编写脚本来执行某些任务,并根据某些数值对脚本进行迭代,这是我们可以使用这些运算符在bash中比较数字的地方。
根据需要,可以使用两组不同的Integer比较运算符。
在方括号内
双括号内
整数或者数字的比较运算符
运算符名称 | 方括号语法 | 双圆括号语法 | 注释 |
---|
| is equal to
| [ $INT1 -eq $INT2 ]
OR[[ $INT1 -eq $INT2 ]]
| ==
| 如果比较中的两个整数相等,则返回TRUE |
| is not equal to
| [ $INT1 -ne $INT2 ]
OR[[ $INT1 -ne $INT2 ]]
| !=
| 如果比较中的两个整数不相等,则返回TRUE|
| is greater than
| [ $INT1 -gt $INT2 ]
OR[[ $INT1 -gt $INT2 ]]
| (( $INT1 > $INT2 ))
| 如果左整数大于右整数,返回TRUE|
| is less than
| [ $INT1 -lt $INT2 ]
OR[[ $INT1 -lt $INT2 ]]
| (( $INT1 @@@ $INT2 ))
| 如果左整数的值小于右整数,则返回TRUE|
| is greater than or equal to
| [ $INT1 -ge $INT2 ]
OR[[ $INT1 -ge $INT2 ]]
| (( $INT1 >= $INT2 ))
| 如果左操作数大于等于右操作数值,则返回TRUE|
| is less than or equal to
| [ $INT1 -le $INT2 ]
OR[[ $INT1 -le $INT2 ]]
| (( $INT1 @@@= $INT2 ))
| 如果左操作数小于或等于右操作数,则返回TRUE|
1.方括号内的整数比较运算符
这些比较运算符必须在单或者双方括号" []"或者" "中使用
1.1检查整数是否相等(-eq)
我将编写一个基本脚本来比较两个不同变量的数字。
这两个整数变量都具有相同的数字,但让我们使用比较运算符进行验证:
INT1=100 INT2=100 if [ $INT1 -eq $INT2 ]; then echo "exit status: $?" echo "Both integers are equal" else echo "exit status: $?" echo "Both integers are not equal" fi
该脚本的输出返回零退出状态,因为两个变量的编号相同。
exit status: 0 Both integers are equal
1.2使用(-ne)比较具有不同数字的变量
在此示例脚本中,我们将使用-ne运算符来检查和比较变量。
这两个变量都分配了不同的数字
INT1=100 INT2=101 if [ $INT1 -ne $INT2 ]; then echo "exit status: $?" echo "Both integers are not equal" else echo "exit status: $?" echo "Both integers are equal" fi
该脚本的输出为第一个if条件返回零退出状态。
exit status: 0 Both integers are not equal
1.3使用(-gt)和(-lt)比较整数值
要检查变量中的数字是否彼此"大于"或者"小于",我们使用-gt或者-lt运算符。
在此示例中,我们知道" INT1"大于" INT2",但让我们使用比较运算符进行验证
INT1=101 INT2=100 if [ $INT1 -gt $INT2 ]; then echo "exit status: $?" echo "$INT1 is greater than $INT2" else echo "exit status: $?" echo "$INT2 is greater than $INT1" fi
该脚本的输出。
第一个条件返回TRUE,退出状态为零。
exit status: 0 $INT1 is greater than $INT2
如果我修改变量值,那么现在" INT1"比" INT2"要小,但让我们使用比较运算符进行验证:
INT1=99 INT2=100 if [ $INT1 -lt $INT2 ]; then echo "exit status: $?" echo "$INT1 is lesser than $INT2" else echo "exit status: $?" echo "$INT2 is lesser than $INT1" fi
现在,此脚本的输出将为第一个条件返回零状态,其中-lt是TRUE。
exit status: 0 $INT1 is lesser than $INT2
1.4使用(-ge)和(-le)比较整数值
我们通常在循环条件中使用-ge和-le,其中脚本将执行特定任务,直到循环完成。
我将使用基本的" if and else"条件脚本来验证这两个比较运算符的返回状态
INT1=101 INT2=100 if [ $INT1 -ge $INT2 ]; then echo "exit status: $?" echo "$INT1 is greater than or equal to $INT2" else echo "exit status: $?" echo "$INT2 is greater than or equal to $INT1" fi
该脚本的输出针对第一个条件返回" TRUE"
exit status: 0 $INT1 is greater than or equal to $INT2
在同一脚本中,我将修改两个变量的值以验证小于等于运算符
INT1=99 INT2=100 if [ $INT1 -le $INT2 ]; then echo "exit status: $?" echo "$INT1 is lesser than or equal to $INT2" else echo "exit status: $?" echo "$INT2 is lesser than or equal to $INT1" fi
该脚本的输出
exit status: 0 $INT1 is lesser than or equal to $INT2
2.双括号内的整数比较运算符
这些比较运算符必须使用双括号(())
。
2.1使用(<)或者(>)比较整数
在此示例脚本中,我们使用双括号下的比较运算符比较变量
INT1=99 INT2=100 if (( $INT1 < $INT2 )); then echo "exit status: $?" echo "$INT1 is lesser than $INT2" else echo "exit status: $?" echo "$INT2 is lesser than $INT1" fi
该脚本的输出
exit status: 0 $INT1 is lesser than $INT2
类似地,要验证大于(>
)运算符:
INT1=99 INT2=100 if (( $INT1 > $INT2 )); then echo "exit status: $?" echo "$INT1 is greater than $INT2" else echo "exit status: $?" echo "$INT2 is greater than $INT1" fi
该脚本的输出
exit status: 1 $INT2 is greater than to $INT1
2.2使用(<=)或者(> =)比较整数
这些比较运算符主要用于实时环境中的循环条件中。
INT1=99 INT2=100 if (( $INT1 <= $INT2 )); then echo "exit status: $?" echo "$INT1 is lesser than or equal to $INT2" else echo "exit status: $?" echo "$INT2 is lesser than or equal to $INT1" fi
此脚本的输出,因为在此示例中," INT1"小于" INT2",因此第一个条件已返回" TRUE"
exit status: 0 $INT1 is lesser than or equal to $INT2
在同一脚本中,我将修改整数值:
INT1=99 INT2=100 if (( $INT1 >= $INT2 )); then echo "exit status: $?" echo "$INT1 is greater than or equal to $INT2" else echo "exit status: $?" echo "$INT2 is greater than or equal to $INT1" fi
该脚本的输出会相应更改,现在报告的是" INT2"大于" INT1"
exit status: 1 $INT2 is greater than or equal to $INT1