bash脚本入门教程:从零开始写你的第一个自动化脚本

什么是bash脚本

你有没有试过每天上班第一件事就是打开终端,输入一连串命令:切换目录、拉代码、重启服务、查看日志……重复多了,手都快抽筋了。其实这些操作完全可以交给一个文件自动完成,这个文件就是bash脚本。

bash(Bourne Again Shell)是Linux和macOS系统中最常用的命令行解释器。bash脚本就是把一系列终端命令写进一个文本文件里,让系统按顺序执行。它不需要编译,写完就能跑,特别适合做自动任务。

写一个最简单的脚本

打开编辑器,比如nano或vim,新建一个文件叫hello.sh:

#!/bin/bash

echo "你好,世界!"
date
pwd

第一行#! /bin/bash叫做“shebang”,告诉系统用bash来运行这个文件。下面三行是具体命令:打印一句话、显示当前时间、输出当前路径。

让脚本能执行

保存文件后,默认它是不能直接运行的。需要先加执行权限:

chmod +x hello.sh

然后就可以运行了:

./hello.sh

如果看到三行输出,说明脚本跑通了。

变量和输入

脚本里也能用变量。比如你想打招呼时带上用户名:

#!/bin/bash

name="小明"
echo "你好,$name"

变量名前加$就能读取它的值。你还可以让脚本接受外部输入:

#!/bin/bash

name=$1
echo "你好,$name"

运行时传个参数进去:

./hello.sh 张三

输出就会是:你好,张三。

条件判断:让脚本变聪明

有时候你想根据情况做不同操作。比如检查某个文件是否存在:

#!/bin/bash

if [ -f "/tmp/test.log" ]; then
    echo "日志文件存在"
else
    echo "日志文件不见了"
fi

中括号[ ]是test命令的简写,-f用来判断文件是否存在。注意空格不能少,这是bash的规矩。

循环处理多个任务

假设你有一堆图片要重命名,手动一个个改太累。用for循环几秒搞定:

#!/bin/bash

for img in *.jpg; do
    mv "$img" "photo_$img"
done

这段脚本会把当前目录下所有.jpg结尾的文件前面加上photo_前缀。

实战例子:自动备份文件夹

来写个实用的脚本,把指定目录打包成时间戳命名的压缩包:

#!/bin/bash

src_dir=$1
backup_name="backup_$(date +%Y%m%d_%H%M).tar.gz"

tar -czf $backup_name $src_dir
echo "备份完成:$backup_name"

保存为backup.sh,加权限后运行:

./backup.sh ./myproject

就会生成一个类似backup_20240405_1530.tar.gz的文件。以后再也不怕删错东西了。

调试小技巧

脚本出问题怎么办?可以在运行时加-x参数,让它打印每一步执行的命令:

bash -x backup.sh ./myproject

或者在shebang后面加-x:

#!/bin/bash -x

这样能清楚看到变量展开后的实际命令,方便排查错误。

写bash脚本不难,关键多练。从改名、备份、日志清理这种小事开始,慢慢你会发现,很多重复劳动,其实一分钟就能自动化掉。