Linux shell脚本和编程|青训营笔记

145 阅读4分钟

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的一种具体实现

image.png

  • 除了替代 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.

image.png shell 不仅提供了与内核和设备交互的方法,还集成了一些今天软件开发中通用的设计模式(比如管道和过滤器), 具备控制流程,循环,变量, 命令查找的机制。既是命令解释器, 也是一门编程语言, 作为命令解释器, 它提供给用户接口,使用丰富的 GNU 工具集, 第三方的或者内置的, 比如 cd、pwd、exec、test、 netstat 等等shell可以作为一种编程语言

语法和变量

自定义变量

image.png

image.png

image.png

配置文件加载

image.png 通过系统用户登录默认运行的shell 非登录交互式运行shell 执行脚本运行非交互式shell 如果取得 bash 需要完整的登录流程, 我们称之为 login shell, 比如 ssh 远程登录一台主机 不需要登录的bash 我们称为 non-login bash, 比如在原来的 bash 中执行 bash开启子进程、 执行一些外部命令 如果修改了配置文件,不会立即生效,需要我们重启终端或者执行 source 命令

运算符和引用

当我们关闭终端,命令就会停止运行。加上nohup可以在关闭终端后不停止命令 image.png

管道

管道和管道符|,作用将前一个命令的结果传递给后面的命令,如果需要互通,比如第一个命令的返回传递给第二个命令,就需要用到管道,管道的本质就是将多个程序进行一个连接,和信号一样,也是进城通信的方式之一 语法:cmd1 | cmd2 要求:管道右侧的命令必须能接受标准输入,比如grep命令、ls、mv等不能直接使用,可以使用xargs预处理 注意:管道命令仅仅处理stdout,对于stderr会予以忽略,可使用set -o pipefail设置shell遇到管道错误退出

重定向

image.png

  • 每个 shell 命令在执行时都会打开三个文件描述符, 文件描述符0、1、2, 分别对应 stdin、stdout、stderr, 这三个文件描述符默认默认指向 终端输入、终端输出,那么当命令需要获取输入的时候,它会去读取 fd0, 当要输出的时候它会像 fd1、fd2写入, 改变这些描述符指向的行为叫做重定向
  • 2>&1 必须写在 > 之后
  • << 比较特殊, 表示继续沿用当前的标准输入, 只是当识别到指定的标识符后停止, 将接收到的内容作为 stdin
判断命令

shell提供test、[、[[、三种判断符号 可用于:整数测试、字符串测试、文件测试

语法

  • test condition
  • [ condition ]
  • [[ condition ]]

image.png 注意:

  • 中括号前后有空格符
  • [和test是命令,只能使用自己支持的标志位,<、>、=只能用来比较字符串
  • 中括号内的便令,最好都用引号括起来
  • [[更丰富,在整型比较重支持<、>、=,在字符串比较中支持=~正则表达

exit:手动退出shell命令 exit10返回10给shell,返回值非0,为不正常退出 $? 用于判断当前shell前一个进程是否正常退出(非0为不正常退出)

分支语句

image.png

循环

image.png

image.png

函数

image.png

image.png

模块化

image.png

常见命令

image.png

shell脚本

image.png

执行过程

image.png

shell展开

参数展开

image.png

标题:Shell 脚本和编程 - 掘金

网址:juejin.cn/course/byte…