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

103 阅读2分钟

shell脚本和编程

课程介绍

价值:Linux服务器基本操作和管理

前端node.js服务的进程管理、问题排查、资源监控等

使用shell编写TCE,SCM,docker脚本

 

01 shell的基本概念

终端:获取用户输入设备

Tty:teletypewriter的简称,和终端等价

终端模拟器:mac terminal iterm2等关联虚拟tty的输入输出软件

Shell:command inteerpreter处理来自终端模拟器的输入,解释执行后输出结果给终端

Bash:shell的一种具体实现

 

发展:

贝尔实验室为Linux开发了第一个v6 shell

为v7linux 开发sh(大名鼎鼎)

开源组织gnu为取代bourne shell开发了bash

(mac最近版本都将shell切换为zsh

 

构成:(是一种编程语言)

 

 

02 语法和命令

 

变量:

 

父子shell:启动子进程shell帮助父进程完成,完成后父进程继续下一命令

 

 

 

 

系统环境变量:

#0 当前shell名称 脚本名称 112等可以获取到传入参数

#   传入脚本的参数数量  if[#-gt 1 ]

$✳️ 传入脚本的所有参数

? 上条命令的执行状态码  if[?  上条命令的执行状态码  if[?-eq0]

$PS1   命令提示符  export PS1=”\U@\h\w>” (用户名、主机名、目录)

$HOME 用户主文件夹  cd~

PATH 全局命令的搜索路径PATH=PATH  全局命令的搜索路径PATH=PATH:[]

 

02 配置文件加载

登陆式和非登陆式(交互式或非交互式)

 

Source~.bashrc  执行脚本

 

运算符和引用

 

比较符号和其他编程语言没什么区别

 

 

How to访问这个服务器 以及如何后台运行 关闭shell后仍然运行(nohup&)

访问:hello,world

 

管道

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

语法:cmd1|cmd2

Eg:

 

要求:1.管道右侧的命令必须能够接受标准输入,比如grep命令可以直接使用,但是is,mv等不可以直接使用,则可以用xargs进行预处理(管道右边加xargs)

2.管道命令仅仅处理stdout,对于stderr会忽略(不会报错),可以使用set-o pipefall设置遇到管道错误退出。

 

重定向

 

把输入结果导向到别的地方,而非默认指向终端 eg:

 

报错后,导向到别的文件

于是read-cut第一行(信息)到auth文件

 

判断命令

 [、[[、test三种判断符号

 

-e看文件是否存在,-f看文件是否存在且是否为普通文件

注意:

中括号:前后必须空格做分割

[,test是命令,只能使用自己支持的标志位

<=只能做字符比较,不能整数比较

中括号内的变量,最好都引号括起来

[[更丰富、在数型比较中支持,<>=,在字符串中支持=~正则表达式

分支语句:

语法一              

If condition;then

程序段

Elif condition;then

程序段

Else

程序段

Fi

语法二

 

循环

while循环:(条件成立,继续循环)

While condition;do 程序段;done

Until(条件成立,跳出循环)

Until condition ;do 程序段;done

for循环:(对列表循环)

For var in 【words…】;do程序段 ;done

 

函数($符号获取参数)

语法一

funcName ()(echo”abc”;)

语法二

Function funcName()(echo”abc”;)

注意:

 

状态码:echo $?

执行结果:echo $content

 

模块化

Source[函数库的路径]

 

 

 

常用命令

 

 

03 执行过程和原理

执行

shell脚本一般以.sh结尾,也可以没有,

这是一个约定,第一行需要指定用什么命令解释器来执行

 

前两种是在子进程中运行,第三种是在该进程中运行

 

执行过程:

字符解析-shell展开-重定向-执行命令-收集状态并返回

 

shell展开类型:

 

1.大括号展开:由三部分构成,前缀,一对大括号,后缀,大括号内可以是逗号分隔的字符串序列也可以是序列表达式

 

 

 

 

2.波浪号展开

 

 

3.参数展开

 

 

3.命令替换

 

4.数学计算

 

5.文件名展开

 

 

04 调试以及和前端项目做集成

调试:

1.普通log,使用echo,printf

 

2.使用set命令

(-u :遇到不存在的变量报错并终止

-x :运行结果前,现输出执行那一命令

-e :只要发生错误,就终止执行

-o pipefall:只要一个子命令失败,整个管道命令就失败,脚本终止执行)

 

3.Vscode debug插件

1,shellman插件 代码自动提示补全

2.shellcheck 代码语法校验

3.Shell-format 代码格式化

4.bash debug:支持单步调试

(安装vscode visual studio code插件 编写launch.json文件 升级bash到4.x以上版本)

 

前段集成

 

 

Shell 调用:$’command’

 

课程总结