什么是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脚本不难,关键多练。从改名、备份、日志清理这种小事开始,慢慢你会发现,很多重复劳动,其实一分钟就能自动化掉。