把重复操作写成脚本,一劳永逸。
第一个脚本
vim hello.sh
#!/bin/bash
echo "Hello, Linux!"
chmod +x hello.sh
./hello.sh
第一行 shebang 告诉系统用 bash 解释。不加 x 权限就 bash hello.sh 跑。
变量
name="chris"
echo "Hello, $name"
count=5
echo $((count + 3))
等号两边不能有空格。$变量 取值,$(()) 算术。
if 判断
if [ -f "/tmp/test.txt" ]; then
echo "文件存在"
else
echo "文件不存在"
fi
[ ] 两边空格不能少。常用:-f 文件存在,-d 目录存在,-z 字符串空,= 字符串相等,-eq 数字相等。
for 循环
for f in /var/log/*.log; do
echo "处理 $f"
done
for i in {1..5}; do
echo "第 $i 次"
done
实战:备份脚本 v1
#!/bin/bash
date=$(date +%Y%m%d)
tar -czf /backup/site-$date.tar.gz /var/www/html
echo "备份完成: site-$date.tar.gz"
进阶:backup.sh v2
#!/bin/bash
set -e # 出错就停,不继续
log() { echo "[$(date '+%H:%M:%S')] $1"; }
BACKUP_DIR="/backup"
SRC="/var/www/html"
date=$(date +%Y%m%d)
log "开始备份..."
mkdir -p $BACKUP_DIR
tar -czf $BACKUP_DIR/site-$date.tar.gz $SRC
log "备份完成"
# 只留最近 7 天
find $BACKUP_DIR -name "site-*.tar.gz" -mtime +7 -delete
log "清理旧备份完成"
set -e 出错即停,log 函数统一打时间戳,find 自动删 7 天前的。
调试:bash -x
bash -x backup.sh
逐行打印执行过程,哪行跪了一目了然。
小结
下一篇 L12:文本处理三剑客——grep/sed/awk,日志分析实战。