Shell脚本和编程 | 青训营笔记

69 阅读1分钟

学习shell的价值:

  1. Linux 服务器的基本操作和管理
  2. 前端Node.js 服务的进程管理、问题排查、资源监控等运维操作
  3. 使用shell 编写TCE、SCM、Docker脚本,完成服务编译和部署

Shell基础概念

概念

终端

获取用户输入、展示运算结果的硬件设备

终端模拟器

Mac Terminal、 iTerm2等,关联虚拟tty的输入输出软件

tty

teletypeWriter的简称,和终端等价.早期指电传印机.在linux中是输入/输出环境

Shell

command interpreter .处理来自终端模拟器的输入,解释执行之后输出结果给终端

Bash

shell的一种具体实现

构成

image.png

变量

image.png

自定义变量

#!/bin/ bash
#变量名=变量值((等号左右不能有空格)
page_size=1
page_num=2
#将命令复制给变量
_ls=ls

#将命令结果赋值给变量
file_list=$ ( ls -a)

#默认字符串,不会进行+运算
total=page_size*page_num

#声明变量为整型
let total=page_size*page_num

declare -i total=page_size*page num

#导出环境变量
export total

declare -x total

运算符和引用

image.png

重定向

输出重定向符号

>:覆盖写入文件
>>︰追加写入文件
2>∶错误输出写入文件
&>︰正确和错误输出统一写入到文件中

输入重定向符号

<
<<

判断命令

shell中提供了test、[ 、[[三种判断符号,可用于:

  • 整数测试
  • 字符串测试
  • 文件测试

语法:

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

注意:

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

函数

注意

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

执行过程

  1. 字符解析
  • 识别换行符、分号(﹔)做行的分割
  • 识别命令连接符(Ⅱl &&管道)做命令的分割
  • 识别空格、tab符,做命令和参数的分割
  1. shell展开,例如{1..3}解析为123
  2. 重定向,将stdin . stdout. stderr的文件描述符进行指向变更
  3. 执行命令
  • builtin直接执行
  • 非builtin使用SPATH查找,然后启动子进程执行