Shell 基本运算符(手把手讲解)

更新时间:

💡一则或许对你有用的小广告

欢迎加入小哈的星球 ,你将获得:专属的项目实战 / 1v1 提问 / Java 学习路线 / 学习打卡 / 每月赠书 / 社群讨论

截止目前, 星球 内专栏累计输出 90w+ 字,讲解图 3441+ 张,还在持续爆肝中.. 后续还会上新更多项目,目标是将 Java 领域典型的项目都整一波,如秒杀系统, 在线商城, IM 即时通讯,权限管理,Spring Cloud Alibaba 微服务等等,已有 3100+ 小伙伴加入学习 ,欢迎点击围观

前言

在 Shell 脚本编程中,运算符(Operators)是构建逻辑和执行计算的核心工具。无论是执行简单的算术运算,还是通过条件判断控制程序流程,运算符都如同“编程语言的齿轮”,驱动着脚本的高效运行。对于编程初学者而言,掌握 Shell 基本运算符不仅是入门的必经之路,更是编写复杂脚本的基石。本文将从零开始,逐步解析 Shell 中各类运算符的功能、使用场景及实际案例,帮助读者在理解中实践,在实践中巩固。


一、算术运算符:数学运算的“瑞士军刀”

算术运算符是 Shell 中最基础的运算符类型,主要用于数值计算。它们与数学中的运算符高度相似,但需注意 Shell 的语法限制。

1.1 基础算术运算符

运算符说明示例结果
+加法$(( 3 + 5 ))8
-减法$(( 10 - 2 ))8
*乘法$(( 4 * 2 ))8
/除法(取整结果)$(( 9 / 2 ))4
%取模(余数)$(( 10 % 3 ))1

案例演示

sum=$(( 5 + 3 ))  
echo "5 + 3 = $sum"  # 输出:8  

remainder=$(( 17 % 5 ))  
echo "17 除以 5 的余数是 $remainder"  # 输出:2  

形象比喻
算术运算符就像厨房中的量杯和秤,帮助程序员精准地“称量”数值的大小,确保计算结果准确无误。


1.2 算术表达式语法

在 Shell 中,算术运算需通过 $(( ))let 命令执行。例如:

result=$(( (3 + 5) * 2 ))  
echo $result  # 输出:16  

let "total = 10 * 2 + 5"  
echo $total   # 输出:25  

注意事项

  • 算术表达式中不可有空格(如 $(( 3 + 5 ) 会报错),但 $(( (3+5) )) 是允许的。
  • 除法运算会自动取整,若需浮点运算需借助 bc 工具。

二、关系运算符:条件判断的“裁判员”

关系运算符用于比较两个值,返回布尔结果(0 表示真,非零表示假)。它们常与 if 语句或 test 命令结合,控制程序的分支逻辑。

2.1 关系运算符列表

运算符说明示例(使用 test 命令)结果
-eq等于test 5 -eq 50
-ne不等于test 5 -ne 30
-gt大于test 10 -gt 70
-lt小于test 4 -lt 60
-ge大于等于test 8 -ge 80
-le小于等于test 3 -le 50

案例演示

if [ 10 -eq 10 ]; then  
  echo "数值相等"  
else  
  echo "数值不等"  
fi  


number=15  
if [ $number -gt 10 ] && [ $number -lt 20 ]; then  
  echo "数值在 10 到 20 之间"  
fi  

形象比喻
关系运算符如同裁判的哨声,根据比较结果给出“通过”或“不通过”的判决,帮助程序做出下一步决策。


2.2 逻辑运算符:条件组合的“交通指挥官”

逻辑运算符用于将多个条件组合,形成更复杂的判断逻辑。常见的逻辑运算符包括:

运算符说明示例(使用 test 命令)结果
&&与(两个条件都为真)test 5 -gt 3 && test 2 -lt 40
||或(至少一个条件为真)test 1 -eq 0 || test 2 -eq 20
!非(反转结果)! test 3 -eq 31

案例演示

if [ $age -gt 18 ] && [ $age -lt 60 ]; then  
  echo "属于成年人工作年龄"  
fi  

if [ $score -ge 90 ] || [ $score -le 60 ]; then  
  echo "成绩优异或需补考"  
fi  

注意事项
test 命令中,逻辑运算符需与方括号 [ ] 配合使用,并确保每个条件表达式用单独的 [ ] 括起。


三、赋值运算符:变量操作的“快捷键”

赋值运算符简化了变量的更新操作,常用于循环或递增/递减场景。

3.1 赋值运算符列表

运算符说明示例(等效表达式)
=直接赋值a=5
+=加后赋值a+=3 等效于 a=a+3
-=减后赋值a-=2 等效于 a=a-2
*=乘后赋值a*=4 等效于 a=a*4
/=除后赋值a/=2 等效于 a=a/2

案例演示

counter=0  
counter+=5  
echo $counter  # 输出:5  

value=3  
value*=2  
echo $value    # 输出:6  

形象比喻
赋值运算符如同自动售货机的“一键加币”按钮,让变量更新变得简洁高效。


四、条件运算符(?:):三元表达式的“速记法”

条件运算符 ?: 是 Shell 中唯一一个三元运算符,用于在一行代码中实现条件判断和赋值。语法为:

条件 ? 表达式1 : 表达式2  

若条件为真,则执行表达式1;否则执行表达式2。

4.1 应用场景

number=-5  
result=$(( number > 0 ? number * 2 : number * 3 ))  
echo $result  # 输出:-15(因 number 为负,执行 number*3)  

echo "输入的值是:$value"  
value=$(( value > 100 ? 100 : value ))  
echo "调整后的值:$value"  # 若输入值超过 100,则强制设为 100  

注意事项
条件运算符需在 $(( )) 环境中使用,且优先级较高,建议用括号明确优先级。


五、实战案例:综合运用运算符构建脚本

通过一个实际案例,整合上述运算符的应用,展示 Shell 脚本的完整逻辑:

#!/bin/bash  

if [ $# -ne 2 ]; then  
  echo "用法:$0 <数字1> <数字2>"  
  exit 1  
fi  

num1=$1  
num2=$2  

sum=$(( num1 + num2 ))  
product=$(( num1 * num2 ))  
max=$(( num1 > num2 ? num1 : num2 ))  

echo "两数之和:$sum"  
echo "两数之积:$product"  
echo "较大数值:$max"  

if [ $(( num1 % 2 )) -eq 0 ]; then  
  echo "$num1 是偶数"  
else  
  echo "$num1 是奇数"  
fi  

运行示例

$ ./calculator.sh 7 4  
两数之和:11  
两数之积:28  
较大数值:7  
7 是奇数  

结论

通过本文对 Shell 基本运算符的系统解析,读者已掌握从基础算术到复杂条件组合的多种运算符用法。运算符不仅是 Shell 编程的“语法糖”,更是构建智能脚本的“逻辑引擎”。建议读者通过以下步骤巩固知识:

  1. 动手实践:编写包含多种运算符的脚本,观察输出结果。
  2. 结合案例:尝试将运算符应用于文件管理、系统监控等实际场景。
  3. 深入学习:探索 expr 命令、位运算符等进阶内容,提升 Shell 脚本的灵活性。

掌握 Shell 基本运算符后,您将能够更自信地应对自动化任务挑战,让 Shell 脚本真正成为您的“生产力工具”。

最新发布