菜单

Administrator
发布于 2026-10-10 / 1 阅读
0
0

Linux 学习笔记 L11:Shell 脚本入门

把重复操作写成脚本,一劳永逸。

第一个脚本

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

逐行打印执行过程,哪行跪了一目了然。

小结

语法

示例

变量

name="x",$name

if

if [ -f f ]; then ... fi

for

for i in {1..3}; do ... done

函数

log() { echo $1; }

set -e

出错即停

bash -x

调试模式

下一篇 L12:文本处理三剑客——grep/sed/awk,日志分析实战。


评论