Shell 脚本是 Linux/Unix 环境下自动化操作的核心工具,基于 Bourne-Again Shell(bash,最主流)编写,能批量执行命令、实现逻辑控制、处理文本 / 文件等。本文从基础语法→进阶特性→实战案例→最佳实践全面覆盖,适合零基础到进阶学习。
一、基础入门:Shell 脚本核心概念
-
脚本基础规范
(1)脚本文件结构
一个标准的 Shell 脚本包含 3 部分:
#!/bin/bash # 解释器声明(必须放在第一行,指定用 bash 执行)
# 注释:以 # 开头,单行注释(无多行注释,可通过 :<<EOF ... EOF 模拟)
echo "Hello Shell!" # 执行命令
-
#!/bin/bash称为 Shebang,告诉系统用/bin/bash解释脚本; -
若省略 Shebang,系统会用当前默认 Shell(通常也是 bash)执行。
(2)脚本执行方式
| 执行方式 | 命令示例 | 特点 |
| 作为可执行文件(推荐) | chmod +x test.sh && ./test.sh | 脚本需有执行权限,按 Shebang 指定解释器执行,独立进程运行 |
| 用 bash 直接执行 | bash test.sh / sh test.sh | 无需执行权限,强制用 bash/sh 解释,忽略 Shebang |
| 嵌入当前 Shell 执行 | source test.sh / . test.sh | 不启动子进程,脚本变量 / 命令影响当前 Shell 环境(如配置环境变量) |
-
变量:Shell 数据存储核心
(1)变量定义与使用
-
定义规则:变量名只能包含字母、数字、下划线,不能以数字开头,等号
=前后无空格; -
使用方式:通过
$变量名或${变量名}引用(推荐加 {},避免歧义)。 -
# 基础定义 name="Shell Script"age=20# 引用 echo "名称:$name" # 输出 名称:Shell Script echo "年龄:${age}岁" # 输出 年龄:20岁(加 {} 避免和后续字符混淆) # 只读变量(定义后不可修改/删除) readonly PI=3.14# PI=3.1415 # 执行会报错:-bash: PI: readonly variable# 删除变量(unset 不能删除只读变量) unset age echo $age # 输出空行
(2)特殊内置变量(高频使用)
| 变量 | 含义 |
| $0 | 脚本文件名(如 ./test.sh) |
| $1~$9 | 脚本的位置参数,$1 是第一个参数,$2 是第二个,以此类推 |
| ${10} | 第 10 个参数(需加 {},直接 $10 会被解析为 $1+0) |
| $# | 位置参数的总个数 |
| $* | 所有位置参数(视为一个整体,如 "$1 $2 $3") |
| $@ | 所有位置参数(视为独立个体,如 "$1" "$2" "$3") |
| $? | 上一条命令的退出码(0 = 执行成功,非 0 = 失败) |
| $$ | 当前脚本的进程 ID(PID) |
| $! | 上一个后台运行进程的 PID |
示例:
echo "第一个参数:$1"
echo "参数总数:$#"
echo "所有参数(\$*):$*"
echo "所有参数(\$@):$@"
# 执行:./test.sh a b c# 输出:# 脚本名:./test.sh# 第一个参数:a# 参数总数:3# 所有参数($*):a b c# 所有参数($@):a b c
(3)环境变量与自定义变量
-
自定义变量:仅当前 Shell 进程有效(子进程不继承);
-
环境变量:全局有效,可通过
export声明,子进程会继承。
# 自定义变量
temp="临时变量"
# 环境变量
export PATH="$PATH:/usr/local/bin"
# 扩展系统路径
export LANG=zh_CN.UTF-8 # 设置字符编码
-
输入输出:与用户 / 文件交互

最低0.47元/天 解锁文章
33万+

被折叠的 条评论
为什么被折叠?



