shell脚本和编程
学习shell的价值
- Linux服务器的基本操作和管理
- 前端 Node.js 服务的管理、问题排查、资源监控等运维操作
- 使用 shell 编写 TCE、SCM、Docker 脚本、完成服务编译和部署
课前准备
一台安装了 linux 系统的物理机或者云主机,可运行 shell 脚本
本地的 vscode 安装 Bash Debug 插件,并升级 bash 到 4.0 以上
Npm 全局安装 zx 依赖
Shell基础概念
概念
终端获取用户输入,展示运算结果的硬件设备
历程
Ken Thompson (来自贝尔实验室)在 1971 年为 UNIX开发了第一个 shell,称为 V6 shell
Stephen Bourne 在贝尔实验室 为 V7 UNIX 所开发的 Bourne shell,即sh
开源组织 GNU 为了取代 Bourne shell 开发的 Bourne-Again shell,即 Bash
命令和语法
变量
自定义变量:
作用域:当前shell
声明方式:=
规范: 字符串、整形、浮点型、日期型
环境变量
作用域:当前shell及其子域
声明方式: export、declare -x
系统环境变量:
作用域:所有 shell
声明方式: 启动加载
系统环境变量
$0:当前shell名称
$#:传入脚本的参数数量
$*:传入脚本的所有参数
$?:上条命令执行的状态码
$PS1:命令提示符
$HOME:用户主文件夹
$PATH:全局命令的搜索路径
运算符和引用
| 类型 | 符号 | 作用 |
|---|---|---|
| 算术运算符 | + - * / % !& | 常规运算 |
| 逻辑运算符 | || && ! | |
| 比较运算符 | == != < > | |
| 引号 | 双引号 "" | 部分引用、紧紧 $ ` \ 保留作用 |
| 单引号 '' | 完全引用、原样输出 | |
| 反引号 `` | 执行命令 | |
| 圆括号 | (()) | 算术运算 |
| () | 执行命令 | |
| 命令连接 | || | cmd1执行完返回码非0,则继续执行cmd2 |
| && | cmd1执行完返回码为0,则继续执行cmd2 | |
| ; | cmd、cmd2 串行执行 | |
| 后台运行 | & | 让命令在后台运行,可与nohup一起使用 |
管道
管道与管道符 |,作用是将前一个命令的结果传递给后面的命令
重定向
输出重定向符号
> :覆盖写入文件
>>:追加写入文件
2>:错误输出写入文件
&>:正确和错误输出统一写入到文件中
判断命令行
test、[、[[
可用于整数测试、字符串测试、文件测试
分支语句
语法1:
if condition;then
程序段
elif condition;then
程序段
else
程序段
fi
语法2
case $变量 in:
"第一个变量内容")
程序段
;;
"第一个变量内容")
程序段
;;
*)
程序段
;;
esac
函数
语法一:
funcName(){echo "abc";}
语法二:
function funcName(){echo "abc"}