文章目录
1 总体介绍
1.1 什么是Bash
Bash是一个用于GNU操作系统的shell,也就是命令解释器。
1.2 什么是Shell
shell是一个能执行各种命令的宏处理器。
- 宏处理是指扩展文本和符号以创建更大的表达式的功能。
Unix shell不仅是一个命令解释器,还是一种编程语言。
2 Shell的基本功能
shell会读取输入并将之分解为一个个单词和运算符,并使用引用规则来决定每个单词和字符的不同含义。然后shell会把这些解析为命令和其他结构,去除一些特定单词的特殊含义,对另外一些进行扩展,根据需要进行重定向,执行指定的命令,等待其退出状态,并让这个状态能用于后续检查或处理。
2.1 Shell操作
1.读取命令
2.根据引用规则对命令做展开,同时进行别名扩展
3.将符号解析为简单或者复杂命令
4.进行各种shell扩展
5.进行必要的重定向,并将其从命令参数列表中去掉
6.执行得到的命令
7.(可选)等待命令结束并收集其退出状态
2.1.1 引用
引用在 shell 中用以去除某些字符或单词的特殊含义。
可以用来禁止对特殊字符的特殊处理,使得保留字不再被认为是保留字,或者禁止参数扩展。
三种引用机制:转义字符、单引用、双引用
2.1.2 转义字符
\
字符 | 描述 |
---|---|
\a | 警告(响铃) |
\b | 退格删除 |
\e | 转义字符(不属于ANSI C) |
\f | 走纸换页 |
\n | 新行 |
\r | 换行 |
\t | (水平)制表符 |
\v | 垂直制表符 |
\ \ | 反斜杠 |
\ ’ | 单引号 |
\nn | 由八进制数nnn(一到三个数字)代表的一个八位字符 |
\xHH | 由十六进制数HH(一到两个数字)代表的一个八位字符 |
\cx | 一个控制字符CTRL-X |
2.1.3 单引用
‘’
2.1…4 双引用
“”
2.2 Shell命令
2.2.1 简单命令
一个简单的shell命令,包括命令本身、加一些参数,用空格分隔。
2.2.2 管道
控制字符| 或者 |&
1.格式
[ time [-p] ] [!]命令一[[|或者|&]]命令二...]
|&是2>&1 | 的简写形式
2.2.3 命令队列
命令队列由一个或者管道通过运算符 ;、&、&&、||连接而成,最后还可以由 ; 、&或者换行符结束
&&和||具有同样的优先级,;和&也是。
与队列
命令一 && 命令二
或队列
命令一 || 命令二
2.2.4 复合命令
Bash提供了循环结构、条件结构、以及将命令分组并将之整体执行的机制。
1.循环结构
- until
- 语法格式
until 测试命令; do 命令块; done
-
while
-
语法格式
while 测试命令; do 命令块; done
- for
- 语法格式
for 变量 [in 单词 ]; do 命令块; done
for((表达式一;表达式二;表达式三));do命令块;done
2.条件结构
- if
- 语法格式
if 测试命令一 ;then
命令快一;
[elif 测试命令二 ;then
命令快二;]
[else
其他命令块;]
fi
- case
- 语法格式
case 单词 in
[ [(] 模式一 [| 模式二] ...)
命令块
;;]
...
...
...
esac
每个分句都以";;"、";&"、";;&" 结束
;;结尾:匹配第一个模式后就不会再匹配其他模式
;& 结尾:有其他分句就继续执行
;;& 结尾:有其他分句就检查其模式,模式为真就继续执行
- select
- 语法格式
select 名称 [in 单词表 ...];do 命令块;done
- ((…))
- 语法格式
((算术表达式))
等于 let “表达式”
- [[…]]
- 语法格式
[[条件表达式]]
3.命令组合
- ()
- 语法格式
(表达式)
- {}
- 语法格式
{表达式;}
2.3 Shell函数
赋值语句可以作为内部命令 alias、declare、typeset、export、readonly、local的参数
2.3.1 位置参数
由除了单个0以外的一个或多个数字表示的参数
2.3.2 特殊参数
这些参数只能使用不能赋值
*从1开始的参数 “$ *” ="$1c$2c"
@从1开始的参数 “$ @”="$1c""$2c"…
?
-连字符
$
!后台执行的命令
0
_ 下划线