Shell 脚本
Shell 脚本是自动化运维与批处理任务的基础。Bash 是最常用的脚本语言,语法简单且与系统命令天然集成。
Shebang 与执行
脚本首行的 Shebang 指定解释器。
#!/usr/bin/env bash
echo "Hello, $(whoami)"
赋予执行权限后即可运行:chmod +x deploy.sh && ./deploy.sh,也可显式调用 bash deploy.sh。
变量与特殊变量
变量赋值时等号两侧不能有空格,引用使用 $ 或 ${}。
name="linux"
echo "hello $name, version ${name}_2"
# 特殊变量
$0 # 脚本名
$1 # 第一个参数
$# # 参数个数
$@ # 全部参数
$? # 上条命令退出码
$@ 与 $* 看似相似,但 "$@" 会保留参数边界,推荐使用前者遍历参数。
条件与循环
# 条件
if [[ -f "$1" ]]; then
echo "file exists"
elif [[ -d "$1" ]]; then
echo "is directory"
else
echo "not found"
fi
# for 循环
for f in *.log; do
gzip "$f"
done
# while 循环
count=0
while [[ $count -lt 5 ]]; do
echo $count
((count++))
done
[[ ]] 是 Bash 关键字,无需转义;[ ] 是 test 命令的别名,注意两侧空格。
函数
log() {
local msg="$1"
echo "[$(date '+%F %T')] $msg"
}
log "task started"
函数内推荐用 local 声明局部变量,避免污染全局命名空间。
严格模式与调试
set -euo pipefail
-e:遇错即停。-u:未定义变量报错。-o pipefail:管道中任一命令失败即整体失败。
调试时使用 bash -x script.sh 打印每条执行命令,或 set -x 在脚本局部开启、set +x 关闭。