1、首先要明白为什么学习Shell
- ①Linux服务器的基本操作和管理
- ②前端Node.js服务的进程管理、问题排查、资源监控等运维操作
- ③使用Shell编写TCE、SCM、Docker脚本,完成服务编译和部署
2.了解相关概念
- 终端:获取用户输入、展示运算结果的硬件设备
- tty:teletypeWriter的简称、和终端等价,早期指电脑打印机,在linux中是输入\输出 环境
- 终端模拟器:Mac Teminal、iTem2等,关联虚拟tty的输入输出软件
- shell:command interpreter,处理来自终端模拟器的输入,解释执行输出结果给终端
- Bash:shell的一种具体实现。
3.变量
| 类型 | 作用域 | 声明方式 | 规范 |
|---|---|---|---|
| 自定义变量 | 当前shell | = | 字符串、整型、浮点型、日期型 |
| 环境变量 | 当前shell及其子shell | export、declare-x | |
| 系统环境变量 | 所有shell | 启动加载 |
4.自定义变量
1.基本语法
(1)定义变量:变量=值
(2)撤销变量:unset 变量
(3)声明静态变量:readonly变量,注意:不能unset
2.变量定义规则
(1)变量名称可以由字母、数字和下划线组成,但是不能以数字开头,环境变量名建议大写。
(2)等号两侧不能有空格
(3)在bash中,变量默认类型都是字符串类型,无法直接进行数值运算。
(4)变量的值如果有空格,需要使用双引号或单引号括起来。
3.shell中预置变量 $@ 与 @* 的区别
当 @ 不被双引号" "包围时,它们之间没有任何区别,都是将接收到的每个参数看做一份数据,彼此之间以空格来分隔;但是当它们被双引号" "包含时,就会有区别了:
$*会将所有的参数从整体上看做一份数据,而不是把每个参数都看做一份数据。
$@仍然将每个参数都看作一份数据,彼此之间是独立的。