如何比较Bash中的数字或者整数

时间:2020-01-09 10:37:19  来源:igfitidea点击:

作为系统管理员,我们可能会遇到许多此类要求,在这些要求中,我们将需要编写脚本来执行某些任务,并根据某些数值对脚本进行迭代,这是我们可以使用这些运算符在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