Shell基础概念
终端 tty 终端模拟器 Shell Bash
终端是获取用户输入、展示运算结果的硬件设备。
而tty是teletypeWriter的简称、和终端等价,早期之电传印机,在linux中是输入/输出环境。
终端模拟器是 Mac Terminal、iTerm2等,关联虚拟tty的输入输出软件。
shell 是command interpreter,处理来自终端模拟器的输入,解释执行之后输出结果给终端。
Bash 是shell的一种具体实现。

Shell 语法和命令
变量类型

自定义变量

系统环境变量

**注:**如果修改了系统配置,不会立即生效,需要我们重启终端或者执行source命令。
配置文件加载

运算符和引用

管道
管道和管道符 | , 作用是将前一个命令的结果传递给后面的命令。
cmd1 | cmd2
管道右侧的命令必须能接受标准输入才行,比如grep命令,ls,mv等不能直接使用,可以使用xargs预处理。
重定向
输出重定向符号
> : 覆盖写入文件
>> : 追加写入文件
2> : 错误输出写入文件
&> : 正确和错误输出同一写入到文件中
输入重定向符号
<
<<
判断命令
Shell中提供了test、[、[[ 三种判断符号,可用于
- 整数测试
- 字符串测试
- 文件测试
语法:
test condition
[ condition ]
[[ condition ]]
分支语句
语法1
if condition ; then
程序段
elif condition ; then
程序段
else
程序段
fi
语法2
case $变量 in:
"第一个变量内容")
程序段
;;
"第一个变量内容")
程序段
;;
*)
程序段
;;
esac
循环
while condition ; do 程序段 ; done
until condition ; do 程序段 ; done
for var in [words...]; do 程序段; done
函数
funcName(){echo "abc";}
function funcName() {echo "abc";}
模块化
source [函数库的路径]
常用命令

执行
在第一行指定命令解释器
启动方式
./filename.sh
bash ./filename.sh
source ./filename.sh
执行过程
1、字符解析
- 识别换行符、分号(;),做行的分割
- 识别命令连接符(|| && 管道)做命令的分割
- 识别空格、tap符号,做命令和参数的分割
2、shell展开
3、重定向
4、执行命令
- builtin直接执行
- 非builtin使用$PATH查找,然后启动子进程执行
5、收集状态并返回
Shell展开
大括号展开
(brace Expansion) {...}
波浪号展开
参数展开
(Shell Parameter Expansion) ${}
命令替换(Command Substitution)
在子进程中执行命令,并用得到的结果替换包裹的内容,形式有两种: $(...) 或 ‘...'
文件名展开
课程总结

今天学习了Shell脚本编程,需要记忆的东西很多,下去要多多记忆练习,为后面学习打下好基础才是真正的学会。