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

47 阅读2分钟

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

1.shell的基本概念

shell = 解释器或编程语言

2.命令与语法

image.png

声明变量:


#变量名=变量值(等号左右不能有空格)  
page_size=1  
page_num=2  

# 将命令复制给变量  
ls=ls  

# 将命令结果赋值给变量
file _list=S(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

管道与管道符|,作用是将前一个命令的结果传递给后面的命令
语法:cmd1|cmd2
要求:管道右侧的命令必须能接受标准输入才行,比如grep命令,ls、mv等不能直接使用,可以使用xargs预处理
注意:管道命令仅仅处理stdout,对于stderr会予以忽略,可以使用set-o pipefall设置shell遇到管道错误退出

重定向
输出重定向符号
'>' : 覆盖写入文件
'>>':追加写入文件
'2>':错误输出写入文件
'&>':正确和错误输出统一写入到文件中

输入重定向符号
<
<<

判断命令
shell中提供了teat、[、[[三种判断符号,磕用于:

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

语法:

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

注意:

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

函数
语法一: funcName(){echo"abc";}

语法二: function funcName(){echo"abc";}

注意

  • shell自上而下执行,函数必须在使用前定义,
  • 函数获取变量和shell scri类似,$0代表函数名,
  • 函数内return仅仅表示函数执行状态,不代表函数执行结果
  • 返回结果一般使用echo、printf,在外卖呢使用${},``获取结果
  • 如果没有return,函数状态是上一条命令的执行状态,储存在$?中

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

#!/bin/bush
#!/usr/bin/env bash

2.启动方式

#文件名运行
./filename.sh

#解释器运行
bash./filename.sh

#source运行
source./filename.sh