前言
本节课简单介绍了Shell的基础知识,理论加实践,让我们更好的理解Shell脚本的强大之处。
1.Shell基础
1.概念
- 终端:获取用户输入、展示运算结果的硬件设备
- tty:在linux中是输入\输出环境
- 终端模拟器:关联虚拟 tty 的输入输出软件
- Shell:处理来自终端模拟器的输入, 解释执行之后输出结果给终端
物理终端=>软件终端tty=>终端模拟器=>shell
2.发展历史
3.构成
- 定位
- 提供了与内核和设备交互的方法
- 集成了一些今天软件开发中通用的设计模式(比如管道和过滤器)
- 具备控制流程,循环,变量,命令查找的机制
- 命令解释器(提供给用户接口)
- 一门编程语言
2.语法和命令
1.变量
整体分类如下:
这里我们主要介绍环境变量,在配置环境中常常使用相应的操作。
2.配置文件
常用配置操作:
source ~/.bashr
- 分类
- 通过系统用户登录默认运行的shell
- 非登录交互式运行shell
- 执行脚本运行非交互式shell
不同方法的流程如下:
login shell:取得 bash需要完整的登录流程,如ssh 远程登录一台主机
non-login bash:不需要登录的bash,如在原来的 bash 中执行 bash开启子进程、执行一些外部命令(需要我们重启终端或者执行 source 命令)
3.运算符
4.管道
- 作用:将前一个命令的结果传递给后面的
- 命令语法:
cmd1 | cmd2 - 要求:管道右侧的命令必须能接受标准输入才行,比如grep命令, Is,mv等不能直接使用,可以使用xargs预处理
- 注意:管道命令仅仅处理 stdout,对于 stderr 会予以忽略,可以使用 set -o pipefail 设置 shell 遇到管道错误退出
5.重定向
- 输出符号
-
: 覆盖写入文件
-
:追加写入文件
- 2>:错误输出写入文件
- &>:正确和错误输出统一写入到文件中
-
- 输入符号
- <
- <<
6.命令
常用命令如下:
-
判断命令语法
- test condition
- [ condition ]
- [[ condition ]]
-
分支命令语法
- if else
- case
-
循环命令语法
- while循环:while condition ; do程序段; done
- until循环:until condition ; do 程序段; done
- for循环:for var in [words...]; do程序段; done
-
函数命令语法
- funcName(){ echo "abc"; }
- function funcName() { echo "abc"; }