Shell 脚本入门:写你的第一个自动化脚本
为什么值得学 Shell 脚本
每天重复敲的命令:备份目录、清理日志、批量改名、检查服务状态……把这些命令写进一个脚本文件,一次编写、到处运行,是 Linux 运维和开发提效最直接的办法。本文从零开始,带你写出第一个真正能用的自动化脚本。
第一个脚本
新建一个脚本文件,写入下面两行:
#!/bin/bash
echo "Hello, Shell!"
第一行 #!/bin/bash 叫 Shebang,告诉系统用哪个解释器执行这个脚本。然后给它执行权限并运行:
chmod +x hello.sh
./hello.sh
注意:./ 不能省——它表示“当前目录下的这个文件”,直接写脚本名时系统只会在 PATH 里找,找不到就会报 command not found。
变量与参数:让脚本“活”起来
写死内容的脚本用处有限,变量和参数能让同一个脚本处理不同输入:
#!/bin/bash
name=$1
echo "你好,$name,今天是 $(date +%Y-%m-%d)"
$1 是第一个命令行参数,$# 是参数个数,$@ 是全部参数,$(...) 可以把命令的输出嵌进字符串。运行这个问候脚本并传入名字,就会输出问候。
条件判断:脚本的“脑子”
#!/bin/bash
if [ -f "$1" ]; then
echo "$1 存在,大小为 $(du -h "$1" | cut -f1)"
else
echo "$1 不存在"
fi
方括号两边必须留空格,变量加双引号是个好习惯——文件名带空格时不加引号会被拆成多个词,这是新手最常见的坑。
循环:批量处理才是自动化的精髓
#!/bin/bash
for file in *.log; do
echo "正在处理 $file"
gzip "$file"
done
一个 for 循环就能把当前目录所有 .log 文件压缩打包。把“对一批文件做同一件事”交给循环,是 Shell 最擅长的活。
实战:写一个日志备份脚本
把前面学的拼起来,写一个每天能用的备份脚本:
#!/bin/bash
set -e
src="/var/log/myapp"
dest="$HOME/backup"
date_str=$(date +%Y%m%d)
mkdir -p "$dest"
tar -czf "$dest/myapp-$date_str.tar.gz" "$src"
find "$dest" -name "myapp-*.tar.gz" -mtime +7 -delete
echo "备份完成:$dest/myapp-$date_str.tar.gz,7 天前的旧备份已清理"
这个脚本做了四件事:按日期打包、自动建目录、清理 7 天前的旧备份、打印结果。set -e 表示任何一步出错就立即退出,避免“半截备份”还以为成功了。
配合 crontab 就能定时跑起来,每天凌晨两点自动备份:
0 2 * * * /bin/bash $HOME/backup.sh >> $HOME/backup.log 2>&1
新手避坑清单
- 变量赋值等号两边不能有空格,
a = 1会被当成命令; $变量尽量用双引号包起来,防止空格和通配符捣乱;- 调试时用
bash -x 脚本名,它会逐行打印执行过程,定位问题很快; - 复杂逻辑先在命令行手动跑通,再写进脚本。
小结
Shell 脚本的核心就三样:把命令存进文件、用变量和参数代替写死的值、用判断和循环处理批量任务。先从备份、清理这类身边的小任务练起,写上三五个脚本,你对 Linux 的理解会深很多。
- 点赞
- 收藏
- 关注作者
评论(0)