青训营笔记

57 阅读2分钟

引言:学习shell的价值

1、Linux服务器的基本操作和管理

2、前端Node.js服务的进程管理、问题排查、资源监控等运维操作

3、使用shell编写TCE、SCM、Docker脚本,完成服务编译和部署

管道

管道与管道符 | ,作用是将前一个命令的结果传递给后面的命令

语法:cmd1|cmd2

要求:管道右侧的命令必须能接受标准输入才行,比如grep命令  ,ls,mv等不能直接使用可以使用 xargs预处理

注意:管道命令仅仅处理stdout,对于stderr会予以忽略,可以使用set -o pipfail设置shell遇到管道错误退出 重定向

输出重定向符号

( > ) :覆盖写入文件

( >> ) :追加写入文件

2> :错误输出写入文件

&> :正确和错误输出统一写入文件

输入重定向符号:<   <<

判断命令

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

语法:test condition 、[condition]、[[condition]]

注意:

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

函数:

  • shell自上而下进行,使用前必须定义
  • 函数获取变量和shell script类似,0代表函数名,后续参数通过0代表函数名,后续参数通过1、$2获取
  • 函数内return仅仅代表函数执行状态,不代表函数执行结果
  • 返回结果一般使用echo、printf,在外面使用$()获取结果
  • 如果没有return, 函数状态是上一条命令的执行状态

执行

shell脚本一般以.sh结尾,也可以没有,这是一个约定;第一行需要指定用什么命令解释器来执行

启动方式

(1)字符解析

  • 识别换行符,分号(;)做行的分割
  • 识别命令连接符(||  &&  管道)做命令的分割
  • 识别空格、tab符,做命令和参数的分割

(2)shell展开,例如{1..3}解析为1 2 3 

(3)重定向,将stdin  stdout  stderr的文件描述符进行指向变更

(4)执行命令

  • builtin直接执行
  • 非builtin使用$PATH查找,然后启动子进程执行

(5) 收集状态并返回