shell
基本概念
shell: 一门编程语言,也是命令解释器,让用户通过界面访问操作系统内核。
bash: shell的一种实现。
语法和命令
变量
- 自定义变量
作用域在当前shell,声明方式为=(变量名和=之间不能有空格) - 环境变量
作用域在当前shell和其子shell,声明方式为export、declare -x。 - 系统环境变量 作用域在所有shell
自定义变量
使用:$
your_name="qinjx"
echo $your_name`
declare [+/-] 选项 变量
| 选项 | 含义 |
|---|---|
| - | 给变量设置类型属性 |
| + | 取消变量的类型属性 |
| -a | 声明变量为数组 |
| -i | 声明变量为整型 |
| -x | 声明变量为环境变量 |
| -r | 声明变量为只读 |
| -p | 显示变量的类型 |
管道
语法:cmd1 | cmd2
作用:将前一个命令的结果传给后面的命令。
要求:右侧的命令必须能接受标准输入,ls、mv等不能直接使用,可用xargs预处理
重定向
一般情况下,每个shell命令运行时都会打开三个文件:
- 标准输入文件(stdin):文件描述符为0,终端输入。
- 标准输出文件(stdout):文件描述符为1,终端输出。
- 标准错误文件(stderr):文件描述符为2,写入错误信息。
输出重定向符号
- >: 覆盖写入文件
- >>: 追加写入文件
- 2>: 错误输出写入文件
- &>: 正确和错误输出统一写入文件
输入重定向符号
- <
- <<
test 命令
命令用于检查某个条件是否成立,它可以进行数值、字符和文件三个方面的测试。
分支语句
if-else
if else 的 [...] 判断语句中大于使用 -gt,小于使用 -lt。
如果使用 ((...)) 作为判断语句,大于和小于可以直接使用 > 和 <。
b=20
if (( $a == $b ))
then
echo "a 等于 b"
elif (( $a > $b ))
then
echo "a 大于 b"
elif (( $a < $b ))
then
echo "a 小于 b"
else
echo "没有符合的条件"
fi
case语法
循环语句
- while
- until
- for
函数
- shell自上而下执行,函数使用前需定义
- 可以带function fun() 定义,也可以直接fun() 定义,不带任何参数。
- 调用函数时可以向其传递参数。在函数体内部,通过 $n 的形式来获取参数的值,例如,$1表示第一个参数,$2表示第二个参数
- return仅表示函数执行状态
- 返回值在调用该函数后通过 $()、`` 来获得。
常用命令
原理分析
执行过程
- 字符解析
- shell展开
- 重定向
- 执行命令1. 花括号展开
- 收集状态并返回
shell展开
- 大括号展开
- 波浪号展开
- 参数展开
- 命令展开
- 数学计算 $(())包裹数学运算表达式,得到结果并替换
- 文件名展开 *?[...]外壳文件名模式匹配
大括号展开
a{d,c,b}e //ade ace abe
{1..5} // 1 2 3 4 5
{1..5..2} //1 3 5(可调整增量,字母不行)
{a..e} a b c d e