Linux shell脚本和编程
Shell是一种命令行界面,也是一种编程语言, 熟练掌握 Shell 能够大大提升 Unix/Linux环境下的工作效率。
学习shell的价值
linux服务器的进本操作和管理 前端Node.js服务的进程管理、问题排查、资源监控等运维操作 使用shell编写TCE、SCM、Docker脚本
shell基础概念
几个概念
终端:获取用户输入、展示运算结果的硬件设备 tty:teletypeWriter的简称,和终端等价,早期指电传打印机,在linux中是输入/输出环境 终端模拟器:Mac Terminal、item2等,关联虚拟tty的输入输出软件 shell command interpreter 处理来自终端的模拟器输入,解释执行后输出结果给终端的 Bash shell的一种具体实现
- 除了替代 v6 shell,sh 还有几个优点,把控制流程,循环,变量引入了脚本,提供了一种更具功能性的语言
- 主流 Linux 系统使用的 shell,许多都以它为锚点。
- bash是 sh 的超集,可以直接执行大部分 sh 脚本。
- Bash 在兼容 Bourne shell 脚本编程的同时,集成了 Korn shell 和 C shell 的功能,包括命令历史,命令行编辑,目录堆栈(pushd 和 popd),一些实用环境变量,命令自动补全等。
- 最近的mac都转化为zsh
构成
SHELL定义:A Unix shell id both a command interpreter ans a promgramming language. As a command interpreter ,the shell pprovides the user interface to the rich set of GUN utilities.
shell 不仅提供了与内核和设备交互的方法,还集成了一些今天软件开发中通用的设计模式(比如管道和过滤器), 具备控制流程,循环,变量, 命令查找的机制。既是命令解释器, 也是一门编程语言, 作为命令解释器, 它提供给用户接口,使用丰富的 GNU 工具集, 第三方的或者内置的, 比如 cd、pwd、exec、test、 netstat 等等shell可以作为一种编程语言
语法和变量
自定义变量
配置文件加载
通过系统用户登录默认运行的shell
非登录交互式运行shell
执行脚本运行非交互式shell
如果取得 bash 需要完整的登录流程, 我们称之为 login shell, 比如 ssh 远程登录一台主机
不需要登录的bash 我们称为 non-login bash, 比如在原来的 bash 中执行 bash开启子进程、 执行一些外部命令
如果修改了配置文件,不会立即生效,需要我们重启终端或者执行 source 命令
运算符和引用
当我们关闭终端,命令就会停止运行。加上nohup可以在关闭终端后不停止命令
管道
管道和管道符|,作用将前一个命令的结果传递给后面的命令,如果需要互通,比如第一个命令的返回传递给第二个命令,就需要用到管道,管道的本质就是将多个程序进行一个连接,和信号一样,也是进城通信的方式之一 语法:cmd1 | cmd2 要求:管道右侧的命令必须能接受标准输入,比如grep命令、ls、mv等不能直接使用,可以使用xargs预处理 注意:管道命令仅仅处理stdout,对于stderr会予以忽略,可使用set -o pipefail设置shell遇到管道错误退出
重定向
- 每个 shell 命令在执行时都会打开三个文件描述符, 文件描述符0、1、2, 分别对应 stdin、stdout、stderr, 这三个文件描述符默认默认指向 终端输入、终端输出,那么当命令需要获取输入的时候,它会去读取 fd0, 当要输出的时候它会像 fd1、fd2写入, 改变这些描述符指向的行为叫做重定向
- 2>&1 必须写在 > 之后
- << 比较特殊, 表示继续沿用当前的标准输入, 只是当识别到指定的标识符后停止, 将接收到的内容作为 stdin
判断命令
shell提供test、[、[[、三种判断符号 可用于:整数测试、字符串测试、文件测试
语法:
- test condition
- [ condition ]
- [[ condition ]]
注意:
- 中括号前后有空格符
- [和test是命令,只能使用自己支持的标志位,<、>、=只能用来比较字符串
- 中括号内的便令,最好都用引号括起来
- [[更丰富,在整型比较重支持<、>、=,在字符串比较中支持=~正则表达
exit:手动退出shell命令 exit10返回10给shell,返回值非0,为不正常退出 $? 用于判断当前shell前一个进程是否正常退出(非0为不正常退出)
分支语句
循环
函数
模块化
常见命令
shell脚本
执行过程
shell展开
参数展开
标题:Shell 脚本和编程 - 掘金