欢迎各位兄弟 发布技术文章
这里的技术是共享的
在macOS的Shell环境中,数值比较需要使用特定的操作符,与字符串比较有所不同。下面我将展示几种常见的数值比较方法及其示例。
[ ]
和 test
命令的传统方式# 等于 if [ $a -eq $b ]; then echo "$a 等于 $b" fi # 不等于 if [ $a -ne $b ]; then echo "$a 不等于 $b" fi # 大于 if [ $a -gt $b ]; then echo "$a 大于 $b" fi # 大于等于 if [ $a -ge $b ]; then echo "$a 大于等于 $b" fi # 小于 if [ $a -lt $b ]; then echo "$a 小于 $b" fi # 小于等于 if [ $a -le $b ]; then echo "$a 小于等于 $b" fi
(( ))
的算术表达式方式(更直观)# 等于 if (( a == b )); then echo "$a 等于 $b" fi # 不等于 if (( a != b )); then echo "$a 不等于 $b" fi # 大于 if (( a > b )); then echo "$a 大于 $b" fi # 大于等于 if (( a >= b )); then echo "$a 大于等于 $b" fi # 小于 if (( a < b )); then echo "$a 小于 $b" fi # 小于等于 if (( a <= b )); then echo "$a 小于等于 $b" fi
#!/bin/bash # 定义要比较的数值 num1=15 num2=20 num3=15 echo "比较数值: $num1, $num2, $num3" echo "======================================" # 1. 使用传统方式比较 echo "1. 使用传统方式比较 [-eq, -ne, -gt, -ge, -lt, -le]:" if [ $num1 -eq $num2 ]; then echo " $num1 等于 $num2" else echo " $num1 不等于 $num2" fi if [ $num1 -eq $num3 ]; then echo " $num1 等于 $num3" else echo " $num1 不等于 $num3" fi if [ $num1 -gt $num2 ]; then echo " $num1 大于 $num2" else echo " $num1 不大于 $num2" fi if [ $num2 -gt $num1 ]; then echo " $num2 大于 $num1" else echo " $num2 不大于 $num1" fi # 2. 使用算术表达式方式比较 echo -e "\n2. 使用算术表达式方式比较 [(()) 和 ==, !=, >, >=, <, <=]:" if (( num1 == num2 )); then echo " $num1 等于 $num2" else echo " $num1 不等于 $num2" fi if (( num1 != num2 )); then echo " $num1 不等于 $num2" fi if (( num1 > num2 )); then echo " $num1 大于 $num2" else echo " $num1 不大于 $num2" fi if (( num2 > num1 )); then echo " $num2 大于 $num1" fi # 3. 复杂条件比较 echo -e "\n3. 复杂条件比较:" if (( num1 >= 10 && num1 <= 20 )); then echo " $num1 在 10 到 20 之间" fi if (( num2 < 10 || num2 > 15 )); then echo " $num2 小于 10 或大于 15" fi # 4. 从用户输入获取数值并比较 echo -e "\n4. 用户输入比较:" read -p "请输入第一个数字: " input1 read -p "请输入第二个数字: " input2 # 确保输入的是数字 if [[ $input1 =~ ^[0-9]+$ ]] && [[ $input2 =~ ^[0-9]+$ ]]; then if (( input1 > input2 )); then echo " $input1 大于 $input2" elif (( input1 < input2 )); then echo " $input1 小于 $input2" else echo " $input1 等于 $input2" fi else echo " 输入的不是有效数字!" fi # 5. 浮点数比较(使用bc命令) echo -e "\n5. 浮点数比较:" float1=3.14 float2=2.71 # 使用bc进行浮点数比较 if (( $(echo "$float1 > $float2" | bc -l) )); then echo " $float1 大于 $float2" else echo " $float1 不大于 $float2" fi # 6. 数值计算并比较 echo -e "\n6. 数值计算并比较:" result=$((num1 + num2)) echo " $num1 + $num2 = $result" if (( result > 30 )); then echo " 结果大于 30" elif (( result == 30 )); then echo " 结果等于 30" else echo " 结果小于 30" fi
将上述代码保存为number_comparison.sh
,然后执行以下命令:
chmod +x number_comparison.sh
./number_comparison.sh
在传统的 [ ]
测试中,必须使用 -eq
, -ne
, -gt
, -ge
, -lt
, -le
这些操作符
在 (( ))
算术表达式中,可以使用更直观的 ==
, !=
, >
, >=
, <
, <=
操作符
Shell默认只支持整数运算,如果需要处理浮点数,可以使用 bc
命令
在比较前确保变量包含的是数值,可以使用正则表达式检查 [[ $var =~ ^[0-9]+$ ]]
使用 $(( ))
可以进行算术运算并将结果赋值给变量
这些示例涵盖了macOS Shell中数值比较的常见用法,可以根据实际需求选择合适的方法。
在 macOS 的 Shell 脚本中,可以使用 test
命令或 [ ]
进行数值比较。以下是常见的数值比较方法及语法示例:
bashif test 数值1 操作符 数值2; then # 条件成立执行的代码 fi # 或使用 [ ](注意空格) if [ 数值1 操作符 数值2 ]; then # 条件成立执行的代码 fi
操作符 | 说明 | 示例 |
---|---|---|
-eq | 等于(Equal) | if [ $a -eq $b ]; then |
-ne | 不等于(Not Equal) | if test $a -ne $b; then |
-gt | 大于(Greater Than) | if [ $a -gt $b ]; then |
-ge | 大于等于(Greater or Equal) | if [ $a -ge $b ]; then |
-lt | 小于(Less Than) | if test $a -lt $b; then |
-le | 小于等于(Less or Equal) | if [ $a -le $b ]; then |
bash#!/bin/bash a=10 b=20 if [ $a -lt $b ]; then echo "$a 小于 $b" fi if test $a -ne $b; then echo "$a 不等于 $b" fi
输出:
10 小于 20
10 不等于 20
空格是必须的:[
和 ]
与内部的表达式之间必须有空格,否则会报错。
bashif [$a -eq $b]; then # 错误写法! if [ $a -eq $b ]; then # 正确写法
变量可能为空时:如果变量未定义或为空,建议用双引号包裹变量:
bashif [ "$a" -lt "$b" ]; then
浮点数比较:test
和 [ ]
仅支持整数。比较浮点数需借助 bc
或 awk
:
bashif [ $(echo "1.2 < 1.3" | bc) -eq 1 ]; then echo "浮点数比较成功" fi
(( ))
和 [[ ]]
)(( ))
:更直观的算术比较(仅限整数):
bashif (( a < b )); then echo "a < b" fi
[[ ]]
:支持更灵活的条件表达式(但数值比较仍推荐用 (( ))
)。
通过以上方法,你可以在 macOS 的 Shell 脚本中实现可靠的数值比较。如果有其他场景需求,可以进一步扩展!