Shell脚本编程中,运算符是我们进行各种复杂操作的基石。无论是日常系统管理、自动化部署还是文件处理,都离不开这些运算符的灵活运用。本文将深入介绍Shell中的各类运算符,助你全面提升脚本编程能力。
灵活运用这些运算符,让你的Shell脚本更高效、更强大

算术运算符用于执行基本的数学运算,包括加法(+)、减法(-)、乘法(*)、除法(/)、取余(%)和赋值(=)等。
基本算术运算符示例:
#!/bin/basha=10b=20# 加法val=`expr $a + $b`echo "a + b : $val"# 乘法(注意转义)val=`expr $a \* $b`echo "a * b : $val"# 取余val=`expr $b % $a`echo "b % a : $val"
注意:表达式和运算符之间必须有空格,乘号需要转义。
现代算术运算的多种实现方式:
expr命令(较老方法,需要注意空格和转义)
$(( )) 表达式(推荐,简洁高效)
let命令(直接操作变量)
$[ ] 表达式(已过时,不推荐)
# 使用 $(()) 进行算术运算result=$((a + b))echo "结果:$result"# 使用let命令let result=a*becho "乘积:$result"
关系运算符用于比较两个数值的大小关系,只支持数字比较,不支持字符串除非字符串值为数字。
常用关系运算符:
-eq:等于
-ne:不等于
-gt:大于
-lt:小于
-ge:大于等于
-le:小于等于
实用示例:
#!/bin/basha=15b=20if [ $a -lt $b ]; thenecho "$a 小于 $b"fiif [ $a -ne $b ]; thenecho "$a 不等于 $b"fi
布尔运算符用于组合多个条件,构建复杂的逻辑判断。
三种布尔运算符:
!:逻辑非
-o:逻辑或
-a:逻辑与
实用示例:
#!/bin/basha=15b=25# 逻辑与if [ $a -gt 10 -a $a -lt 20 ]; thenecho "$a 在10到20之间"fi# 逻辑或if [ $a -lt 10 -o $b -gt 20 ]; thenecho "至少一个条件满足"fi
现代推荐:虽然-a和-o可用,但现在更推荐使用&&和||,它们更符合POSIX标准且可读性更好。
字符串运算符专门用于字符串比较和操作。
核心字符串运算符:
=:检测两个字符串是否相等
!=:检测两个字符串是否不相等
-z:检测字符串长度是否为0
-n:检测字符串长度是否不为0
$:检测字符串是否不为空
实用示例:
#!/bin/bashstr1="Hello"str2="World"# 字符串相等比较if [ "$str1" = "$str2" ]; thenecho "字符串相等"elseecho "字符串不等"fi# 检查字符串是否为空if [ -n "$str1" ]; thenecho "str1非空,长度为:${#str1}"fi
重要提示:字符串比较时,变量引用务必加双引号,防止空变量导致语法错误。
文件测试运算符用于检查文件或目录的属性,是系统管理和脚本健壮性检查的重要工具。
常用文件测试运算符:
运算符 | 说明 |
|---|---|
| 检测文件是否存在 |
| 检测是否是普通文件 |
| 检测是否是目录 |
| 检测文件是否可读 |
| 检测文件是否可写 |
| 检测文件是否可执行 |
| 检测文件是否非空 |
| 检测是否是符号链接 |
实战示例:
#!/bin/bashfile="/path/to/your/file"if [ -e "$file" ]; thenecho "文件存在"if [ -r "$file" -a -w "$file" ]; thenecho "文件可读可写"fielseecho "文件不存在"fi
Shell提供了逻辑运算符来组合多个测试条件。
逻辑运算符的使用:
#!/bin/basha=15b=30# 使用 && 和 || 进行逻辑组合if [ $a -gt 10 ] && [ $b -lt 50 ]; thenecho "两个条件都满足"fiif [ $a -lt 10 ] || [ $b -gt 20 ]; thenecho "至少一个条件满足"fi
[[ ]]与 [ ]的区别:
[[ ]]支持更强大的模式匹配和正则表达式
[[ ]]中可以直接使用 &&和 ||,无需转义
[[ ]]提供更安全的字符串处理
系统健康检查脚本:
#!/bin/bash# 综合运用各类运算符的系统检查脚本echo "=== 系统健康检查 ==="# 检查磁盘空间(使用算术和关系运算符)disk_usage=$(df / | awk 'NR==2 {print $5}' | sed 's/%//')if [ $disk_usage -gt 90 ]; thenecho "⚠️ 磁盘空间不足:使用率 ${disk_usage}%"elseecho "✅ 磁盘空间正常:${disk_usage}%"fi# 检查关键文件是否存在(文件测试运算符)important_files=("/etc/passwd" "/var/log/syslog")for file in "${important_files[@]}"; doif [ -f "$file" -a -r "$file" ]; thenecho "✅ $file 存在且可读"elseecho "❌ $file 不存在或不可读"fidone# 服务状态检查(字符串和逻辑运算符)service_status=$(systemctl is-active sshd)if [ "$service_status" = "active" ]; thenecho "✅ SSH服务运行正常"elseecho "❌ SSH服务异常,状态:$service_status"fi
新手常见错误:
缺少空格:[ $a=$b ]❌ 应该是 [ $a = $b ]✅
未引用的变量:[ -f $file ]❌ 应该是 [ -f "$file" ]✅
混淆字符串和数值比较:用=比较数值 ❌ 应该用-eq✅
调试技巧:
在脚本开头添加 set -x开启调试模式
使用 echo打印中间结果
利用 $?检查上条命令的退出状态
Shell本身不支持浮点运算,但可以通过bc命令实现:
#!/bin/bash# 浮点数运算示例num1=3.14num2=2.71# 使用bc进行浮点运算result=$(echo "scale=2; $num1 + $num2" | bc)echo "加法结果:$result"# 复杂计算area=$(echo "scale=2; 3.14159 * 2.5 * 2.5" | bc)echo "圆面积:$area"
Shell运算符是脚本编程的核心基础,掌握它们能够让你:
高效处理数学计算和数值比较
灵活进行字符串操作和文本处理
精确检查文件属性和系统状态
构建复杂的条件判断逻辑
记住关键原则:
始终在运算符两侧保留空格
变量引用使用双引号防止空值错误
选择适合的运算符类型(数值vs字符串)
优先使用现代语法如$(())和[[ ]]
运算符只是工具,真正的力量在于如何将它们组合起来解决实际问题。不断练习,将这些知识应用到实际工作中,你将成为真正的Shell脚本高手!
你在Shell脚本编程中遇到过哪些运算符相关的坑?欢迎在评论区分享你的经验和技巧!
#Shell编程#Linux#脚本编程#运算符#条件判断#文件测试#字符串比较
如果觉得这篇文章有价值,请不吝点赞、推荐和关注,这是对我最大的鼓励!如有任何Shell编程问题,欢迎留言讨论。分享给更多需要的朋友,共同进步!