# 快速教程：Shell 脚本


## 分类

- Bourne Shell: sh, ksh, Bash, psh, zsh
- C shell: csh,tcsh

## 脚本执行

- echo [选项] [输出内容]
  ```shell
  -e:支持反斜线控制的字符转换
  \\: 输出\本身
  \a:输出警告音
  \b:退格键
  \c:同 -n,取消行末换行符
  \f:换页符
  \n:换行符
  \r:回车
  \t:制表符,Tab
  -n:取消输出后行末的换行符号
  ```

- 赋予执行权限,直接运行:
  `如: chmod 755 hello.sh`

- 通过bash调用执行:
  `如: bash hello.sh`

## Bash基本功能

- history:历史命令查看 history [选项] [文件]
  - `-c`:清空历史
  - `-w`:将缓存命令保存到文件
- 历史调用:
  - `!n `重复执行第n条; 
  - `!! `重复执行上一条;
- 命令优先级: `相对或绝对路命令>别名>内部命令>$PATH`

## 输入输出重定向

- 命令 > 文件: 覆盖输出
- 命令 >> 文件: 追加输出
- 正确和错误输出同时保存: 命令>/>>文件  2>&1

## 输入重定向

wc [选项] [文件名]

- -c: 统计字节数
- -w: 统计单词数
- -l: 统计行数

## 多命令顺序执行

- 命令1;命令2:都执行
- 命令1&&命令2:1正确执行,2才会执行
- 命令1||命令2:1执行不正确,2才会执行

## 管道 grep

- -A n: 列出符合条件的行,并列出后续的n行:
- -B n: --------------------前面的n行;

## 单引号,双引号

- 单引号直接输出; 
- 双引号输出变量值; 
- 反引号也输出值或命令;

## 环境变量

- 设置: export age="18"
  - 查看: set(查看全部);
  -  env(只查看环境变量)	
  - 删除: unset age
- PATH变量:系统查找命令 /bin/(可直接调用执行)
  添加:PATH="$PATH":命令或目录

## 参数变量

- `$n`: 0代表命令本身,1-9代表第n个参数,10以上的参数需加大括号,如${10}
- `$*`: 命令行中所有的参数,看成一个整体
- `$@`: 命令行中所有的参数,但区分对待
- `$#`: 参数个数

## 预定义变量:

- `$?`: 最后一次执行状态;0正确,非0不正确
- `$$`: 当前进程的进程号
- `$!`: 后台运行的最后一个进程的进程号

## 环境变量配置文件

从上到下逐渐调用

- /etc/profile
- /etc/profile.d/*.sh
- ~/.bash_profile
- ~/.bashrc
- /etc/bashrc

