Shell脚本高效编写技巧
变量处理与字符串操作
使用${var}替代$var可以避免歧义,例如${var}_suffix。字符串截取可通过${var:start:length}实现,${var#pattern}能删除最短匹配前缀。
检查变量是否为空:
bash
[ -z "$var" ] && echo "Empty"
错误处理与调试
set -e使脚本在命令失败时立即退出,set -x打印执行的命令方便调试。使用trap捕获信号:
bash
trap 'cleanup; exit 1' SIGINT SIGTERM
数组与循环
现代Shell支持数组操作:
bash
arr=(item1 item2)
for i in "${arr[@]}"; do
echo "$i"
done
参数解析
使用getopts处理命令行选项:
bash
while getopts ":a:b:" opt; do
case $opt in
a) arg1="$OPTARG";;
b) arg2="$OPTARG";;
\?) echo "Invalid option";;
esac
done
文件处理技巧
逐行读取文件:
bash
while IFS= read -r line; do
echo "$line"
done < file.txt
检查文件属性:
bash
[ -f "$file" ] # 常规文件
[ -d "$dir" ] # 目录
[ -r "$file" ] # 可读
数学运算
使用$(( ))进行整数运算:
bash
result=$(( (a + b) * c ))
子shell与进程替换
用( )创建子shell隔离环境,进程替换实现命令输出作为文件:
bash
diff <(cmd1) <(cmd2)
高效文本处理
组合使用grep, awk, sed等工具:
bash
grep "pattern" file | awk '{print $2}' | sed 's/old/new/g'
跨平台兼容性
使用#!/usr/bin/env bash提高可移植性。避免依赖非POSIX特性时注明Shell要求。