你有没有过这种经历:每天上班要敲七八条命令启服务、拉代码、装依赖;或者要在一百个文件上做同样的操作。这些重复活,写成一个 Shell 脚本让电脑自己跑,你只需双击一下。这一篇带你写出第一个能用的脚本。
把脚本想成”给电脑的一张便条清单”:你提前把步骤一条条写清楚,电脑照着念就行,不会漏、不会烦。
第一个脚本
新建文件 hello.sh:
#!/bin/bash
# 这是注释,#! 那行叫 shebang,告诉系统用哪个解释器
echo "你好,这是我的第一个脚本"
#!/bin/bash叫 shebang,指明用 Bash 来解释这个文件。echo就是”打印一句话”。
给它执行权限并运行:
chmod +x hello.sh # 加可执行权限
./hello.sh # 运行(./ 表示当前目录)
变量
name="小明" # 赋值,等号两边不要有空格
echo "你好,$name" # 用 $ 取变量值
count=10
echo "数量是 $count"
注意:name = "小明" 中间有空格会报错——Shell 把空格当命令分隔符,赋值千万别加空格。
接收参数
脚本可以接收运行时的参数:
#!/bin/bash
echo "第一个参数是:$1"
echo "第二个参数是:$2"
echo "全部参数是:$@"
运行 ./script.sh apple banana,$1 就是 apple,$2 是 banana。这让你写的脚本能复用到不同输入。
条件判断
#!/bin/bash
if [ "$1" = "deploy" ]; then
echo "开始部署..."
else
echo "未知命令"
fi
[ ] 里是判断条件,= 判断相等(字符串),数字比较用 -eq、-gt 等。注意 [ 后面和 ] 前面都要有空格,这是新手高频报错点。
循环
#!/bin/bash
# 遍历一串数字
for i in 1 2 3 4 5; do
echo "第 $i 次"
done
# 遍历当前目录所有 .txt 文件
for f in *.txt; do
echo "处理文件:$f"
done
循环让你”对一批东西做同一件事”,比如批量重命名、批量压缩。
实战:一键备份日志
#!/bin/bash
# 把今天的日志打包,按日期命名
DATE=$(date +%Y%m%d)
tar -czf "logs-$DATE.tar.gz" /var/log/*.log
echo "备份完成:logs-$DATE.tar.gz"
$(命令) 能把命令的输出结果存进变量,这里用 date 生成日期当文件名。
常见新手坑
- 赋值加空格:
name = "x"报错,必须name="x"。 [ ]里忘了空格:[ "$a" = "b" ]的方括号内外都要有空格。- 忘了
chmod +x:直接./script.sh提示没权限,得先加执行权限。 - 用 Windows 记事本写脚本:换行符是 CRLF,Linux 跑会报
^M错误。用 VS Code 或终端编辑器写,换行设成 LF。
小测验
- 问题1:脚本第一行为什么要写
#!/bin/bash?答案:shebang,告诉系统用 Bash 解释器来执行这个脚本。 - 问题2:变量赋值
name = "x"为什么错?答案:等号两边不能有空格,Shell 会把空格当命令分隔符。 - 问题3:怎么在脚本里取运行时的第一个参数?答案:用
$1。
更多实战:批量重命名一百个文件
你有一百张照片 photo1.jpg 到 photo100.jpg,想统一加前缀 trip-。手写一百条 mv 不现实,用脚本:
#!/bin/bash
for f in *.jpg; do
mv "$f" "trip-$f"
done
echo "重命名完成"
for f in *.jpg 会把每张 jpg 依次赋给变量 f,mv "$f" "trip-$f" 加上前缀。跑一次搞定一百张。注意变量加引号 "$f",防止文件名里有空格时出错。
让脚本更健壮
真实脚本常加判断,避免出错:
#!/bin/bash
if [ ! -f "$1" ]; then
echo "用法:./check.sh 文件名"
exit 1
fi
echo "文件存在:$1"
[ ! -f "$1" ] 判断第一个参数不是文件就提示用法并退出,比直接跑崩友好。
自测:你真的懂了吗
- 脚本第一行为什么写
#!/bin/bash?答案:shebang,告诉系统用 Bash 解释执行。 - 变量赋值
name = "x"为什么错?答案:等号两边不能有空格。 - 怎么取运行时的第一个参数?答案:用
$1。
常见认知误区
写脚本最容易在细节上翻车。第一,变量赋值加空格——name = "x" 会报错,必须 name="x",因为 Shell 把空格当命令分隔符。第二,[ ] 里忘了空格——[ "$a" = "b" ] 的方括号内外都要有空格,漏了就语法错,这是最高频的报错点。第三,忘了 chmod +x 就 ./script.sh——提示没权限,得先加执行权限。第四,用 Windows 记事本写脚本——换行符是 CRLF,Linux 跑会报 ^M 错误,用 VS Code 或终端编辑器写,换行设成 LF。第五,脚本出错就手动重来——其实在关键步骤加 echo 打印变量值,能快速定位哪一步不对。第六,觉得脚本很难——先从”把几条常用命令串起来”开始,比如备份、批量重命名,比想象中简单,写熟了再学条件循环。脚本是”让电脑替你干活”的第一步,值得花时间。
这一篇你该记住的
- 脚本以
#!/bin/bash开头,用chmod +x加权限后./脚本运行。 - 变量
name="值"(无空格),用$name取值。 - 参数:
$1、$2取第几个,$@取全部。 - 判断
if [ 条件 ]; then ... fi,循环for ... do ... done。 $(命令)捕获命令输出;注意空格和换行符(用 LF)。
下一篇我们讲 Zsh 与 oh-my-zsh:把默认 Shell 换成更智能、更漂亮的 Zsh,并一键装上主题和插件。