Linux的Shell脚本编程的运算符、条件判断与流程控制详解
一、Shell运算符基础
在Shell脚本中,运算操作是自动化任务处理的基础能力。Shell支持三种运算符语法形式,适用于不同场景:
双括号运算符
$((表达式))
RES1=$(((2+3)*4)) # 计算(2+3)*4
特点:支持复杂算术运算,直接返回数值结果
方括号运算符
$[表达式]
RES2=$[(2+3)*4] # 等效于双括号写法
特点:语法简洁,但可读性稍弱于双括号形式
expr命令
TEMP=`expr 2 + 3` # 加法运算 RES3=`expr $TEMP \* 4` # 乘法需转义*
注意:运算符间必须加空格,乘法需用反斜杠转义
*
最佳实践:推荐使用$(( ))
进行算术运算,因其执行效率更高且无需转义符号。
二、条件判断语句
条件判断是流程控制的核心,Shell提供丰富的判断类型:
1. 字符串比较
if [ "ok" = "ok" ]; then
echo "字符串相等"
fi
注意:等号=
两侧必须留空格
2. 数值比较
运算符 | 说明 | 示例 |
---|---|---|
-eq |
等于 | [ 23 -eq 23 ] |
-ne |
不等于 | [ 23 -ne 22 ] |
-gt |
大于 | [ 23 -gt 22 ] |
-ge |
大于等于 | [ 23 -ge 22 ] |
-lt |
小于 | [ 23 -lt 24 ] |
-le |
小于等于 | [ 23 -le 23 ] |
3. 文件判断
运算符 | 说明 | 示例 |
---|---|---|
-f |
文件存在且为普通文件 | [ -f /path/to/file ] |
-d |
目录存在 | [ -d /path/to/dir ] |
-r |
可读权限 | [ -r /path/to/file ] |
-w |
可写权限 | [ -w /path/to/file ] |
-x |
可执行权限 | [ -x /path/to/executable ] |
三、流程控制结构
1. if条件判断
单分支结构:
if [ 条件 ]; then
# 执行代码
fi
多分支结构:
if [ $1 -ge 60 ]; then
echo "及格"
elif [ $1 -lt 60 ]; then
echo "不及格"
fi
2. case多值匹配
case $1 in
"1") echo "周一" ;;
"2") echo "周二" ;;
*) echo "无效输入" ;;
esac
特点:支持模式匹配,*
表示默认分支
3. for循环
列表遍历:
for fruit in apple banana orange; do
echo "水果: $fruit"
done
C语言风格:
SUM=0
for ((i=1; i<=$1; i++)); do
SUM=$[SUM+i]
done
参数遍历:
# 使用$*整体遍历
for arg in "$*"; do
echo "参数: $arg"
done
# 使用$@逐个遍历
for arg in $@; do
echo "参数: $arg"
done
4. while循环
SUM=0
i=1
while [ $i -le $1 ]; do
SUM=$[SUM+i]
i=$[i+1]
done
四、交互式输入处理
read
命令用于读取用户输入:
read -p "请输入您的姓名: " username
echo "欢迎您, $username"
# 带超时设置
read -t 10 -p "请在10秒内输入: " input
五、综合应用示例
场景:开发成绩评估脚本
#!/bin/bash
read -p "请输入考试成绩: " score
if [ $score -ge 90 ]; then
echo "优秀"
elif [ $score -ge 60 ]; then
echo "及格"
else
echo "不及格"
fi
场景:文件操作验证
FILE="/tmp/test.txt"
if [ -f "$FILE" ]; then
echo "文件存在,正在读取..."
cat $FILE
else
echo "文件不存在,正在创建..."
touch $FILE
fi
六、注意事项
- 空格规范:
[ ]
内的条件表达式必须保留空格 - 变量引用:使用
$var
引用变量,双括号内可直接使用变量名 - 错误处理:建议添加
set -e
使脚本在出错时自动退出 - 兼容性:不同Shell(bash/zsh等)可能有语法差异
掌握这些核心语法可使您高效完成系统监控、批量文件处理、自动化部署等任务。建议通过实际项目练习加深理解,例如尝试编写系统资源监控脚本或日志分析程序。