做测试、运维离不开 Shell 自动化脚本,很多新手刚上手就卡在脚本运行报错、变量不会取值、传参看不懂。今天,我们完整拆解「脚本创建与执行」「变量、字符串、脚本传参核心语法」,零基础跟着敲就能学会!
一、基础入门:脚本创建与执行
1. 脚本文件标准格式
(1)文件后缀规范
Shell 脚本统一使用.sh作为文件后缀,例如backup.sh、monitor.sh,方便识别区分普通文本。
(2)脚本头部解释器声明(必写)
脚本第一行固定添加解释器标识,告诉系统用 bash 解析脚本,缺少会出现语法异常:

(3)注释规范
单行注释用#,放在代码上方或行尾做备注,脚本运行时不会执行注释内容:

完整标准模板示例

2. 执行脚本的三种方式
准备测试脚本test.sh,内容如下:

方式 1:赋予执行权限,./ 脚本文件名(企业最常用)
1.添加执行权限

2.执行脚本

原理:通过相对路径调用脚本,会新开 bash 子进程运行,环境变量隔离,是线上标准执行方式。
方式 2:sh /bash 直接调用(无需执行权限)
不需要给脚本加 x 权限,直接指定解释器运行:

适用场景:临时测试、批量调用无权限的脚本文件。
方式 3:source /. 读取脚本到当前终端执行

特点:不会创建子进程,所有变量、操作直接作用于当前终端,常用于加载环境配置脚本。
三种执行方式核心区别总结
执行方式 | 是否需要执行权限 | 是否新开子进程 | 适用场景 |
./[test.sh](test.sh) | 需要 chmod +x | 新开子进程 | 日常自动化脚本、定时任务 |
bash [test.sh](test.sh) | 不需要 | 新开子进程 | 临时调试、无权限文件 |
source [test.sh](test.sh) | 不需要 | 当前终端执行 | 加载环境变量、配置文件 |
二、核心语法:变量与输入输出
变量是 Shell 脚本的灵魂,分为普通变量、字符串处理、脚本传参特殊变量三部分,几乎所有自动化脚本都会用到。
1. 变量定义与使用
(1)普通变量定义规则
1.等号左右不能有空格;
2.变量名只能字母、数字、下划线,不能数字开头;
3.默认字符串类型,无需声明数据类型。

(2)变量取值两种写法

(3)只读变量 readonly
变量赋值后无法修改,固定常量使用:

(4)删除变量 unset
释放变量占用内存,清空变量值:

2. 字符串处理
字符串是 Shell 最常用的数据类型,单引号、双引号、拼接、截取、替换全覆盖。
(1)单引号 vs 双引号区别
•单引号' ':原样输出内容,不会解析变量、转义字符

•双引号" ":识别变量与转义符,日常开发首选

(2)字符串拼接

(3)获取字符串长度${#变量}

(4)字符串截取

(5)字符串替换

3. 脚本传参与特殊变量
运行脚本时向脚本外部传入参数,自动化批量处理、定时任务高频使用。
(1)基础传参演示
创建param.sh,执行命令:bash param.sh java nginx mysql
(2)内置特殊变量详解
特殊变量 | 含义说明 |
$0 | 当前脚本文件名称 |
$1、$2、$3... | 第 1、2、3 个传入参数 |
$# | 传入参数总个数 |
$* | 所有传入参数,整体视为一串字符串 |
$@ | 所有传入参数,分开独立多个参数(循环首选) |
$? | 上一条命令执行返回状态,0 代表执行成功,非 0 代表失败 |
完整示例代码

运行与输出效果:

(3)循环遍历所有传入参数

三、新手高频踩坑避坑指南
1.变量赋值等号带空格:a = 1直接语法报错,必须a=1;
2.拼接字符串不加 {}:echo $name_backup系统会识别全新变量,正确写法${name}_backup;
3.脚本忘记头部 #!/usr/bin/env bash:部分系统执行出现语法解析失败;
4.传参混淆@:循环遍历参数优先使用"$@",避免参数含空格被拆分错乱;
5.Windows记事本编辑脚本:换行符CRLF 会导致脚本运行异常,推荐vim、VS Code 编辑。
四、全文总结
1.脚本创建执行:.sh为标准后缀,头部必须加解释器声明;3 种执行方式按需选用,./脚本是线上主流;
2.变量基础:定义无空格,${变量}规范取值,readonly 只读、unset 删除变量;
3.字符串操作:双引号解析变量、单引号原样输出,支持截取、替换、长度计算;
4.脚本传参:$1/$2获取入参,$#统计参数数量,$?判断命令执行是否成功,$@用于循环遍历所有参数。
本章节是 Shell 脚本入门核心基础,掌握创建、执行、变量、传参后,就能独立编写简单自动化脚本,清理日志、批量部署、服务监控都能轻松实现!
干货福利
需要我整理一份《Shell 变量 + 传参 + 字符串处理速查代码模板》吗?评论区回复【shell 变量】,免费领取,写脚本直接复制复用!
“动动小手,点点关注呗~”🫰
夜雨聆风