Shell 脚本基础笔记
一 shell脚本概述
Shell 脚本是一种用 Shell 命令编写的脚本程序,用于在 Unix/Linux 系统的命令行环境中自动化执行任务。
它由一系列命令、逻辑控制语句(如条件判断、循环)和函数组成,保存为文本文件(通常以 .sh 为扩展名),由 Shell 解释器(如 Bash、Zsh)逐行解析执行。
通过/etc/shells
可查看系统支持的 Shell 类型,常见包括:
sh(Bourne Shell):Unix 系统中 root 默认 Shell,简洁轻量。
bash(Bourne Again Shell):Linux 默认 Shell,功能强大,兼容 sh。
csh:语法类似 C 语言,用于 BSD 系统。
ksh:兼容 sh 并吸收 csh 特性,适合复杂脚本。
Shell 脚本的核心特点:
-
基于命令行:直接调用系统命令(如
ls
、grep
、awk
),无需编译。 -
轻量级:适合快速开发小型自动化任务。
-
跨平台性:在支持相同 Shell 的系统(如 Linux、macOS)中通用。
脚本格式
脚本文件通常以 #!/bin/bash
开头,这被称为 Shebang,作用是指定该脚本使用 bash 解析器来执行。例如:
#!/bin/bash
# 这是一个简单的 Shell 脚本
echo "Hello World!" # 输出文本
mkdir backup # 创建目录
cp *.txt backup/ # 复制所有 txt 文件到 backup 目录
二 Shell脚本中的基本元素
基本结构
1.脚本幻数(Shebang):
脚本第一行的 #!/bin/bash
(常见 ),指定脚本使用的 Shell 解析器,告诉系统用什么程序来解释执行脚本内容。
#!/bin/bash
2.命令:
可执行的语句,是实现脚本功能的核心。比如 echo
用于输出文本,ls
用于列出目录内容 ,cd
用于切换目录等。
3.注释:
单行注释:以 #
开头,用于对某一行代码或脚本某部分功能进行说明,提高脚本可读性,如 # 这是一个输出问候语的脚本
。
多行注释:可利用 :<<'END'
和 END
实现,END
可自定义,如 :<<'COMMENT'
与 COMMENT
配对 。
4.变量:
系统变量:如 $HOME
(用户主目录 )、$PWD
(当前工作目录 )等,由系统定义和维护。
自定义变量:用户自己定义的变量,如 name=Alice
,注意等号两边不能有空格。
特殊变量:$0
(脚本名 )、$1
- $9
(脚本参数 )、$#
(参数个数 )、$?
(上一命令退出状态 )等。
5.运算符:
数值运算:如 +
(加 )、-
(减 )、*
(乘 )、/
(除 )、%
(取余 ) ,可通过 ((运算式))
或 expr
命令进行运算。
条件判断:如 -eq
(等于 )、-ne
(不等于 )、-gt
(大于 )等 ,配合 [ 条件判断式 ]
进行条件判断。
6.流程控制语句:
条件判断:if - then - elif - else - fi
结构,根据条件执行不同代码块。
循环语句:for
循环用于遍历列表或指定范围;while
循环在条件为真时重复执行代码块;until
循环在条件为假时重复执行代码块。
其他:case - esac
用于多条件分支判断;break
用于跳出循环;continue
用于跳过本次循环的剩余部分,继续下一次循环。
7.函数:
可将重复使用的代码块封装成函数,提高代码复用性,定义格式如 函数名() { 程序 }
,调用时直接写函数名。
8.脚本调试与退出值
调试方法
使用sh -x 脚本名
显示脚本执行过程,+
开头的行表示正在执行的命令,便于定位错误。
退出值
定义:命令执行后的状态码(0~255),0 表示成功,非 0 为失败。
查看:执行命令后,用echo $?
查看退出值。
修改:在脚本中用exit 数值
指定退出值,如exit 66
。
示例:
#!/bin/bash
# 作者:czg
# 日期:2025/05/29
# 功能:输出系统信息 echo "当前用户:$czg"
echo "当前路径:$PWD"
date
exit 0 # 正常退出
三 shell脚本的作用
Shell 脚本的主要作用是提升效率和实现自动化,尤其在系统管理、运维、数据处理等领域中不可或缺。
核心作用:
1.自动化重复操作
例:批量重命名文件、定期清理日志、自动备份数据。
替代手动逐条输入命令,减少人为错误。
2.简化复杂任务
例:一键部署服务、集成多步骤流程(如下载数据 → 处理 → 上传结果)。
通过逻辑控制(如 if、for)组合多个命令。
3.系统管理与监控
例:检查磁盘空间、监控进程状态、发送报警邮件。
直接调用系统工具(如 df、ps、cron)。
4.快速原型开发
例:临时测试某个功能或流程。
无需编译,修改后立即运行。
四 脚本执行方法
-
当前环境执行(不创建子进程):
- 命令:
./脚本名
(需赋予执行权限,chmod +x 脚本名
)或source 脚本名
/./脚本名
(无需权限)。 - 特点:在当前 Shell 进程中运行,影响当前环境变量。
- 命令:
-
指定环境执行(创建子进程):
- 命令:
sh 脚本名
或bash 脚本名
,脚本无需执行权限。 - 特点:在子进程中运行,不影响当前环境。
- 命令:
vim lee.sh
#!/bin/bash
cat
.lee.sh #当前
source lee.sh #当前
sh lee.sh #指定
五 Shell 脚本的典型应用场景:
-
日常运维:自动化日志切割、清理过期文件、服务状态监控。
-
部署与发布:一键编译代码、打包应用、更新服务器。
-
数据处理:批量转换文件格式、提取文本内容、生成统计报表。
-
开发辅助:运行测试用例、生成文档、环境配置。