Bash 脚本入门实操:把重复命令变成一键执行
Bash 脚本入门实操:把重复命令变成一键执行
在 Linux 日常使用中,我们经常反复敲同一组命令:更新代码、备份文件、查看日志、批量重命名……每次手动输入不仅慢,还容易敲错。Bash 脚本就是解决这个问题的最简单办法:把命令按顺序写进一个文本文件,赋予执行权限,以后运行这个文件就等于一次执行全部命令。本文带你从零写出第一个能真正用上的 Bash 脚本。
一、第一个脚本:Hello 与变量
新建文件 hello.sh,第一行必须写明解释器:
#!/bin/bash
name="开发者"
echo "你好,$name,今天是 $(date +%F)"
保存后赋予执行权限并运行:
chmod +x hello.sh
./hello.sh
这里有三个要点:#!/bin/bash 叫 Shebang,告诉系统用哪个解释器执行;变量赋值时等号两边不能有空格;引用变量用 $变量名,$(...) 则会先执行里面的命令再把结果嵌进来。把日期、主机名、当前目录用这种方式拼进输出,是写运维小脚本最常用的套路。
二、判断与循环:让脚本会做选择
脚本的价值在于自动化处理重复和分支。比如批量检查一组文件是否存在:
#!/bin/bash
for f in a.log b.log c.log; do
if [ -f "$f" ]; then
echo "$f 存在,大小:$(du -h "$f" | cut -f1)"
else
echo "$f 不存在,跳过"
fi
done
for ... do ... done 负责遍历,if [ 条件 ]; then ... fi 负责判断,-f 表示判断普通文件是否存在,类似的还有 -d 判断目录、-z 判断字符串为空。给变量加双引号是个好习惯:文件名里有空格时,不加引号会被拆成多个参数,加了就安全。
再比如按返回值判断命令成败:每个命令执行后都有退出码,0 表示成功,非 0 表示失败,$? 就能取到它。
ping -c 1 127.0.0.1 > /dev/null
if [ $? -eq 0 ]; then echo "网络通"; else echo "网络不通"; fi
三、实战:一个每日备份脚本
把前面几样组合起来,就能写一个实用的备份脚本:把指定目录打包成带日期的压缩包,并只保留最近 7 份。
#!/bin/bash
SRC="$HOME/projects"
DST="$HOME/backups"
mkdir -p "$DST"
file="backup-$(date +%F).tar.gz"
tar -czf "$DST/$file" "$SRC" && echo "备份完成:$file"
ls -t "$DST"/backup-*.tar.gz | tail -n +8 | xargs -r rm -f
echo "清理完成,目前共 $(ls "$DST"/backup-*.tar.gz | wc -l) 份备份"
这个脚本用到了变量、命令替换、条件执行(&& 表示前一条成功才执行后一条)、管道和通配符,已经覆盖了日常脚本八成的写法。配合系统的定时任务每天自动运行一次,备份这件事就彻底不用惦记了。
四、新手避坑清单
第一,不要在生产环境随手用 rm -rf $变量/,变量为空时会变成删根目录,重要操作先 echo 出来确认。第二,脚本出错难定位时,在开头加 set -x 可以打印每条实际执行的命令,调试完再去掉;要求稳妥可以加 set -e,任一命令失败就立即退出,避免错误滚雪球。第三,路径尽量写绝对路径,定时任务的运行环境和你手动登录时的工作目录往往不同,相对路径最容易在这种时候翻车。
总结
Bash 脚本入门只需要迈过三道坎:会用变量和命令替换把信息拼起来,会用 if 和 for 让脚本做判断和重复,会用退出码和管道把多条命令串成流水线。先从备份、日志清理、批量检查这类每天都重复的小事开始写,脚本越写越顺手,这正是自动化思维的起点。
- 点赞
- 收藏
- 关注作者
评论(0)