一、Shell是什么
Linux系统中运行的一种特殊程序
1.shell的作用
介于系统内核与用户之间,负责解释命令行
2.当用户登录shell
- 用户登陆Linux系统时,自动加载一个Shell程序
- bash是Linux系统中默认使用的Shell程序
- bash文件位于/bin/bash
3.应用场景
- 重复性操作
- 交互性任务
- 批量事务处理
- 服务运行状态监控
- 定时任务执行
二、linux 中常见的shell
-
bash:基于GUN的框架下发展的shell
-
csh:类似C语言的shell
-
tcsh:整合了csh 提供了更多功能
-
sh:已经被bash替换
bash(/bin/bash)是目前大多数 Linux 版本采用的默认 shell。
bash特性:
- 支持快捷键:比如 ctrl+c 强制终止进程、ctrl+l清屏 、Tab补齐等
- 支持查看历史命令(history)
- 支持别名
- 标准输入和标准输出的重定向
- 管道符
- 文件名通配机制
- 支持命令
- 支持变量
三、shell脚本
1.编写脚本代码
- 使用vim文本编辑器
- 每行一条Linux命令,按执行顺序依次编写
2.常用执行脚本文件的方法 1、相对路径(都需要x权限)
相对路径:
chmod +x txt.sh
./txt.sh
2、绝对路径
绝对路径:
chmod +x txt.sh
/root/txt.sh
3、指定解释器去执行(bash 脚本名),不需要执行权限。
sh test.sh
或
bash test.sh
4、source或.脚本文件路径
source test.sh
. test.sh
需要相对或绝对路径执行
注意:
-
执行脚本时的shell环境:
source和 . 执行脚本时,会在当前shell环境中执行脚本。 bash、绝对路径、相对路径 执行脚本时,会创建一个子shell环境,并在这个子shell环境中执行脚本。 -
不建议使用source来执行脚本,可能会影响一些资源配置。
-
脚本中的空白行会被解释器忽略。
-
脚本中,除了shebang,余下所有以#开头的行,都回被视作注释行而被忽略。此即为注释行。
四、重定向与管道操作
- 交互式硬件设备
标准输入:从该设备接收用户输入的数据
标准输出:通过该设备向用户输出数据
标准错误:通过该设备报告执行出错信息
| 类型 | 设备文件 | 文件描述编号 | 默认设备 |
|---|---|---|---|
| 标准输入 | /dev/stdin | 0 | 键盘 |
| 标准输出 | /dev/stdout | 1 | 显示器 |
| 标准错误输出 | /dev/stderr | 2 | 显示器 |
- 重定向操作
| 类型 | 操作符 | 用途 |
|---|---|---|
| 重定向输入 | < | 从指定的文件读取数据 |
| 重定向输出 | > | 将标准输出结果保存到指定的文件,并且覆盖原有内容 |
| 重定向输出 | >> | 将标准输出结果追加到指定的文件的尾部,不覆盖原有内容 |
| 标准错误输出 | 2> | 将错误信息保存到指定的文件,并且覆盖原有内容 |
| 标准错误输出 | 2>> | 将错误信息追加到指定的文件的尾部,不覆盖原有内容 |
| 混合输出 | &> | 将标准输出、标准错误保存到同一文件中 |
| 混合输出 | 2>&1 | 将标准错误输出重定向到标准输出 |
| 注: |
- &表示混合,&> 和 >& 都表示将标准输出和错误输出重定向到同一个文件。
- 命令 > 文件 2>&1,表示把错误输出2重定向给前面的标准输出1 (前面的1被省略了),即将错误输出和标准输出保存到同一个文件中。
例:
1,将“123456789” 重定向输出到 txt1文件中,之后再用txt1文件中的内容给用户zzz设置密码。
2,将123重定向输出到txt2文件中,之后将111输出到txt2文件中,覆盖原有的123,最后将321追加到txt2文件中。
3,混合输出,将标准输出和错误输出同时重定向到文件中。
- 管道符号操作"|"
管道符的作用是连接两个命令,将第一个命令的标准输出作为第二个命令的标准输入。 同一行命令中可以使用多个管道符。
格式:命令A | 命令B