1.Shell基础概念
概念
- 终端:获取用户输入、展示运算结果的硬件设备
- tty:teletypeWriter的简称,和终端等价,早期是电传打印机,在Linux是输入输出环境
- 终端模拟器:Mac Terminal、iTerm2等,关联虚拟tty的输入输出软件
- Shell:command interpreter,处理来自终端模拟器的输入,解释执行之后输出结果给终端
- Bash:Shell的一种具体体现
注:物理终端=>软件终端tty=>终端模拟器=>shell
构成
2.命令和语法
变量
| 类型 | 作用域 | 声明方式 | 规范 |
|---|---|---|---|
| 自定义变量 | 当前shell | = | 字符串、整型、浮点型、日期型 |
| 环境变量 | 当前shell及其子shell | export、declare -x | |
| 系统环境变量 | 所有shell | 启动加载 |
自定义变量
#!/bin/bash
#变量名=变量值(等号左右不能有空格)
page_size=1
page_num=2
#将命令赋值给变量
_ls=ls
#将命令结果赋值给变量
file_list=$(ls -a)
#声明变量为整型
let total=page_size*page_num
declare -i total=page_size*page_num
#导出环境变量
export total
declare -x total
declare [+/-] 选项 变量
| 选项 | 含义 |
|---|---|
| - | 给变量设定类型属性 |
| + | 取消变量的类型属性 |
| -a | 将变量声明为数组类型 |
| -i | 将变量声明为整型 |
| -x | 将变量声明为环境变量 |
| -r | 将变量声明为只读变量 |
| -p | 显示指定变量的被声明的类型 |
系统环境变量
配置文件加载
运算符和引用
管道
为什么会出现“管道”呢?
如果需要互通,比如第一个命令的返回传递给第二个命令,就需要用到管道了,管道的本质是将多个程序进行了一个连接,和信号一样,也是进程通信的方式之一。
- 管道与管道符 | ,作用是将前一个命令的结果传递给后面的命令
- 语法:cmd1 | cmd2
- 要求:管道右侧的命令必须能接受标准输入才行,比如grep命令,ls、mv等不能直接使用,可以使用xargs预处理
- 注意:管道命令仅仅处理stdout,对于stderr会予以忽略,可以使用set -o pipefail设置shell遇到管道错误退出
#!/bin/bash
cat platform.access.log | grep ERROR
netstat -an | grep ESTABLISHED | wc -l
find . -maxdepth 1 -name "*.sh" | xargs ls -l