Linux脚本编程Bash实例:零基础必学的5个实战操作
前置准备
在开始操作前,请确保你满足以下条件:
- 拥有一台Linux服务器或虚拟机(CentOS 7/8、Ubuntu 20.04+ 均可,云服务器也适用)。
- 能够通过SSH终端连接服务器(Windows用户推荐 Putty 或 Xshell,macOS/Linux 直接使用终端)。
- 已安装 bash shell(绝大多数Linux发行版默认自带,可通过
echo $SHELL确认显示/bin/bash)。 - 熟悉基本命令如
cd、ls、mkdir、vim或nano。 - 注意:脚本需要执行权限,默认新建文件没有
x权限,后续会讲如何添加。
分步操作
实例1:第一个Hello World脚本
- 创建脚本文件:
mkdir -p ~/bash_practice && cd ~/bash_practice
vim hello.sh- 写入以下内容:
#!/bin/bash
echo "Hello, World!"第一行 #! 称为 shebang,指定解释器。
/bin/bash
- 赋予执行权限并运行:
chmod +x hello.sh
./hello.sh输出 Hello, World! 即成功。
实例2:使用变量和用户输入
创建一个交互式脚本 greet.sh:
#!/bin/bash
读取用户输入
echo "请输入你的名字:"
read name
echo "Welcome to Linux scripting, $name!"
运行:./greet.sh,输入名字,会看到欢迎语。
实例3:循环批量重命名文件
假设当前目录有多个 .txt 文件,想批量加前缀 backup_:
#!/bin/bash
for file in *.txt; do
mv "$file" "backup_$file"
done
echo "重命名完成!"先创建测试文件:touch a.txt b.txt c.txt,执行脚本后用 ls 查看文件名变化。
实例4:条件判断与备份脚本
备份 /var/log/syslog 到 ~/backup/ 目录,并判断是否成功:
#!/bin/bash
backup_dir="$HOME/backup"
mkdir -p "$backup_dir"
if cp /var/log/syslog "$backup_dir/syslog_$(date +%F).bak"; then
echo "备份成功"
else
echo "备份失败,请检查权限或源文件"
fi注意:$(date +%F) 生成当前日期,确保备份文件不重名。
实例5:脚本参数传递与函数
创建 args_demo.sh:
#!/bin/bash
usage() {
echo "用法:$0 <名字> <年龄>"
exit 1
}
if [ $# -lt 2 ]; then
usage
fi
echo "你好,$1!你的年龄是 $2 岁。"
运行:./args_demo.sh 小明 25,输出 你好,小明!
你的年龄是 25 岁。
避坑指南
- 忘记加 shebang:脚本第一行必须是
#!/bin/bash,否则可能用默认 shell 执行,导致语法错误。 - 权限不足:新创建的脚本文件默认无执行权限,必须执行
chmod +x 文件名.sh才能./运行。 - 变量引用未用双引号:如
mv $file当文件名含空格时会出错,应写成"$file"。 - 路径问题:脚本内若用到相对路径,建议先
cd到目标目录或使用绝对路径。 - 忘记给 if 条件留空格:
if [条件]是错误的,必须if [ 条件 ](方括号前后有空格)。 - 循环中文件列表为空的处理:如果
*.txt没有匹配项,for file in *.txt会直接赋值*.txt字符串,导致意外。建议先shopt -s nullglob或在循环前判断。
高频问题解答
Q1:执行脚本时提示 Permission denied 怎么办?
A:使用 chmod +x 脚本名.sh 添加执行权限,再重新运行。
Q2:脚本中使用了 read,但运行后直接结束没等输入?
A:可能是你使用了管道或重定向输入 ./script.sh < input.txt,或系统将 read 读取了其他流。检查是否在交互式终端运行。
Q3:运行 ./hello.sh 提示 No such file or directory?
A:确认当前目录下存在该文件,可用 ls -l 查看;也可能是 shebang 路径写错(比如 #!/bin/sh 但系统无该路径)。
Q4:循环 for file in *.txt 没找到文件时直接执行了 mv 导致错误?
A:建议在循环前加 shopt -s nullglob,这样无匹配时循环次数为0。
Q5:如何调试 Bash 脚本?
A:运行 bash -x 脚本名.sh,会逐行显示执行的命令和变量值,方便定位错误。
效果验证
- 对于实例1:运行后控制台输出
Hello, World!。 - 实例2:交互式输入名字,输出包含该名字的欢迎语。
- 实例3:执行
ls看到所有.txt文件被重命名为backup_xxx.txt。 - 实例4:检查
~/backup/目录下是否有syslog_YYYY-MM-DD.bak文件,且内容与原文件一致。 - 实例5:传入错误参数(如只传一个参数)应打印用法提示并退出;正确参数则输出问候。
如果你正在处理 Linux脚本编程Bash实例,建议先按本文步骤完整执行三个以上的实例,再根据自己的业务需求做微调;
遇到异常时优先回看避坑和高频问题部分。
多写多调试,就能快速掌握 Bash 脚本的日常用法。