基础概念
- 终端:获取用户输入,展示运算结果的硬件设备
- tty: 和终端等价 在 Linux 中是输入输出环境
- 终端模拟器: 比如 Mac中的 iTerm2等 关联虚拟tty的输入输出软件
- Shell: 可以处理来自终端模拟器的输入,解释执行后输出结果给终端,也是一种编程语言
- Bash: Shell的一种具体实现
shell构成
解释器
- bash内置命令 [ echo let read等 man builtin
- GNU核心工具集 ls mv cat 等 type mv=>/bin/mv
- 第三方库 node,python等封装的模块
编程语言
- 变量:自定义变量,环境变量,系统环境变量
自定义变量
系统环境变量
- 运算:逻辑运算符,算数运算符
- 语句:判断,分支,循环
判断
if test-commands; then
branch-commands;
[elif more-test-commands; then
more-brach-commands;
]
[else
alternative-commands;
]
fi
[ ]表示elif和else分支是可选的部分,不是语法的一部分。- 单词
commands用了复数,代表这部分可以是多个命令。 if ... fi用关键字的镜像作为该结构的起止标志符。test命令是一个专门用于条件判断的内置命令,它支持一系列条件表达式,当条件成立时退出码为 0,不成立时为 1。
test expr
# 或者使用简写
[ expr ]
# 还有一种拓展的test,在原有的基础上支持了正则匹配
[[ expr ]]
- 函数
语法和命令
- Hello Shell
hello.sh
#!/bin/bash
echo "Hello Shell!"
- 管道
- 管道与管道符 | 作用是将前一个命令的结果传递给后面的命令
- 语法:cmd1 | cmd2
- 要求:管道右侧的命令必须能接受标准输入才行 比如 grep命令,ls,mv 等不能直接使用, 可以使用xargs 预处理
- 实例
#!/bin/bash
cat platform.access.log | grep ERROR
netstat -an | grep ESTABLISHED | wc -l
find . -maxdepth l -name "*.sh" | xargs ls -l
3.重定向
输出重定向符号
>:将命令的输出重定向到一个文件中 ,如果文件不存在则创建 ,如果文件已经存在则覆盖
>>:将命令的输出重定向到一个文件中 ,如果文件不存在则创建 ,如果文件已经存在则在文件末尾追加
2>:将命令的错误输出重定向到一个文件中 ,如果文件不存在则创建 ,如果文件已经存在则覆盖
&>:将命令的输出和错误输出重定向到一个文件中 ,如果文件不存在则创建 ,如果文件已经存在则覆盖
输入重定向符号
<:将一个文件的内容作为命令的输入
<<:将一段字符串作为命令的输入
- 执行
- shell脚本一般以
.sh结尾 - 可以没有代码(第一行需要指定使用什么命令解释器来执行)
- 启动方式
# 文件名运行
./test.sh
# 解释器运行
bash ./test.sh
# source 运行
source ./test.sh
Shell脚本编程的注意事项
- 变量的作用域:Shell脚本中变量的作用域有时比较复杂,需要注意变量的作用范围。
- 命令的返回值:Shell脚本中的命令通常会返回一个值,需要注意命令的返回值,以便进行后续的处理。
- 错误处理:Shell脚本中可能会出现各种错误,需要考虑如何处理这些错误,以保证程序的正常运行。