Shell脚本和编程
学习shell的价值:
1、 Linux服务器的基本操作和管理
2、 前端Node.js服务的进程管理、问题排查、资源监控等运维操作
3、 使用shell编写TCE、SCM、Docker脚本,完成服务编译和部署
一、Shell基础概念
终端:获取用户输入、展示运算结果的硬件设备
终端模拟器:Mac iTem2等、关联虚拟tty的输入输出软件
Tty : teletypewriter的简称、和终端等价,早期指电传打印机,在Linux中是输入/输出 环境
Shell:command interpreter,处理来自终端模拟器的输入,解释执行之后输出结果给终端
Bash:shell的一种具体实现
(1)发展
贝尔实验室在1971年为UNIX开发了第一个shell,称为V6 shell
Stephen Bourne 在贝尔实验室为V7 UNIX所开发的Bourne shell,即sh
开源组织GNU为了取代Bourne shell开发的Bourne-Again shell,即Bash
(2)构成
shell 不仅提供了与内核和设备交互的方法,还集成了 些今天软件开发中通用的设计模式(比如管道和过滤器),具备控制流程,循环,变量,命令查找的机制。
既是命令解释器,也是一门编程语言,作为命令解释器,它提供给用户接口,使用丰富的GNU工具集,第三方的或者内置的,比如cd、pwd、exec、test ,netstat 等等。
二、语法
(1)变量
| 类型 | 作用域 | 声明方式 | 规范 |
|---|---|---|---|
| 自定义变量 | 当前shell | = | 字符串、整型、浮点型、日期型 |
| 环境变量 | 当前shell及其子shell | Export\declare -x | |
| 系统环境变量 | 所以shell | 启动加载 |
(2)自定义变量
| 选项 | 含义 |
|---|---|
| - | 给变量设定类型属性 |
| + | 取消变量的类型属性 |
| -a | 将变量声明为数组类型 |
| -i | 将变量声明为整数型 |
| -x | 将变量声明为环境变量 |
| -r | 将变量声明为只读变量 |
| -p | 显式指定变量的被声明的类型 |
(3) 系统环境变量
| 变量名 | 含义 | 常见操作 |
|---|---|---|
| $0 | 当前shell名称/脚本名称 | 2等可以获取到传入参数 |
| $# | 传入脚本的参数数量 | If[$#-gt 1] |
| $* | 传入脚本的所有参数 | |
| $? | 上条命令执行的状态码 | If[$?-eq 0]; |
| $PS1 | 命令提示符 | Export PS1=”\U@\H\W>” |
| $HOME | 用户主文件夹 | Cd~ |
| $PATH | 全局命令的搜索路径 | PTAH=$PTAH:[新增路径] |