1. Shell脚本基础认知
刚接触Shell脚本时,我总在各类语法间反复查阅手册。经过多年运维工作积累,这份速查清单已成为我的终端伴侣。不同于官方文档的冗长,这里整理的都是实际开发中最常用的30%核心语法,却能解决90%的日常需求。
Shell脚本本质是命令的批处理,但通过变量、流程控制和函数等特性,能实现复杂的自动化任务。无论是批量文件处理、定时任务调度还是服务状态监控,熟练使用Shell都能极大提升工作效率。本手册特别适合:
- 需要编写自动化脚本的运维人员
- 希望提升命令行效率的开发人员
- 准备Linux相关认证的备考者
2. 变量操作精要
2.1 变量定义与引用
name="value" # 等号两侧不能有空格 echo $name # 基础引用 echo ${name} # 标准引用(推荐) echo "${name}_tail" # 字符串拼接重要提示:变量名区分大小写,建议全大写命名常量,小写命名临时变量
2.2 特殊变量集锦
$0 # 脚本名称 $1-$9 # 位置参数 $# # 参数个数 $* # 所有参数(字符串) $@ # 所有参数(数组) $? # 上条命令退出码 $$ # 当前进程PID2.3 数组操作技巧
arr=(v1 v2 v3) # 声明数组 echo ${arr[1]} # 访问元素 echo ${arr[@]} # 展开所有元素 echo ${#arr[@]} # 获取数组长度3. 流程控制实战
3.1 条件判断范式
# 数值比较 if [ $a -eq $b ]; then echo "equal" elif [ $a -gt $b ]; then echo "greater" else echo "less" fi # 字符串判断 if [ -z "$str" ]; then echo "empty string" fi # 文件检测 if [ -f "/path/file" ]; then echo "regular file exists" fi避坑指南:
[ ]内两侧必须留空格,字符串变量建议用双引号包裹
3.2 循环结构大全
# for循环 for i in {1..5}; do echo $i done # while循环 while [ $count -lt 5 ]; do echo $count ((count++)) done # 遍历文件行 while read line; do echo $line done < file.txt4. 函数与文本处理
4.1 函数定义规范
function greet() { local name=$1 # 局部变量 echo "Hello, $name" return 0 # 返回值(0-255) } greet "World" # 函数调用4.2 文本处理三剑客
# grep过滤 grep "pattern" file.txt grep -v "exclude" file.txt # 反选 grep -c "count" file.txt # 计数 # sed替换 sed 's/old/new/g' file.txt sed -i.bak 's/old/new/' file.txt # 原地替换并备份 # awk处理 awk '{print $1}' file.txt # 打印首列 awk -F: '{print $1}' /etc/passwd # 指定分隔符5. 实用技巧合集
5.1 调试与错误处理
set -x # 开启调试模式 set -e # 出错立即退出 trap "echo ERROR occurred" ERR # 错误捕获5.2 日期与计算
date +%Y-%m-%d # 格式化日期 echo $((10 + 20)) # 算术运算 bc <<< "scale=2;10/3" # 浮点计算5.3 文件操作备忘
find . -name "*.sh" -exec chmod +x {} \; # 批量赋权 tar -czvf archive.tar.gz dir/ # 压缩目录 md5sum file.txt # 计算校验和6. 性能优化经验
6.1 避免常见性能陷阱
# 错误示例:频繁调用外部命令 for i in $(seq 1 100); do grep "pattern" file.txt > /dev/null done # 正确做法:使用内置语法 for ((i=0;i<100;i++)); do [[ "$(cat file.txt)" =~ "pattern" ]] done6.2 高效文本处理对比
# 慢速方案 while read line; do echo ${line:0:10} done < large_file.txt # 快速方案 awk '{print substr($0,1,10)}' large_file.txt7. 跨平台兼容方案
7.1 Shebang选择策略
#!/bin/bash # Linux标准路径 #!/usr/bin/env bash # 跨平台推荐7.2 语法差异处理
# 检测Shell类型 if [ -n "$BASH_VERSION" ]; then echo "Running in Bash" elif [ -n "$ZSH_VERSION" ]; then echo "Running in Zsh" fi这份手册中的每个语法点都经过生产环境验证。建议打印出来贴在工位,遇到问题时快速查阅比搜索引擎更高效。刚开始可能需要频繁参考,但坚持使用两周后,你会发现自己已经能流畅地写出健壮的Shell脚本了。