shell

发布时间 2023-11-22 20:41:07作者: mikrokosmo

shell

基础知识

指定解析器

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

系统环境变量加载顺序:/etc/profile -> ~/.bash_profile -> ~/.bashrc -> /etc/bashrc -> ~/.bash_logout

变量

# 只读变量
readonly var
# 删除变量
unset var
# 位置变量$1-$n

系统环境变量

image-20231122154828366

特殊环境变量

image-20231122155016927

字符串

单引号:不识别变量,不能使用转义字符;双引号:可以识别变量,转义字符

# 获取字符串长度
echo ${#var}
# 截取子串
echo ${var:start:end}
# %截取左边,#截取右边 ## %% 贪婪匹配
url=http://www.baidu.com
echo ${url#*.}
echo ${url%.*}
替换 // 贪婪匹配
echo ${url/www/news}

# 找下标
echo `expr index "${url}" www`
# 判断字符串是否为空
#-n 判断⻓度是否⾮零
#-z 判断⻓度是否为零

数组

普通数组:只能数字作为索引
关联数组:数字或字符串作为索引

# 格式:关联数组可以使⽤ declare -A 命令或者在数组赋值时使⽤+= 符号来定义
数组名称[索引名称]=元素的值
# declare -a 查看系统的普通数组
# 查看所有值
echo ${array[*]}
echo ${array[@]} //将数组中的每个元素扩展为⼀个单独的参数
# 查看所有索引
echo ${!array[*]}
# 查看长度
echo ${#array[*]}
# 添加
colors=(white "${colors[@]}" green black)
# 删除
unset array[值]

运算符

# 算术运算符
+ - * / % = == !=

# 布尔
! -o -a

# 逻辑
&& ||

# 字符串
== != -z -n str
[ -z $str1 ] //长度是否为0,为0返回true
[ $str1 ] //不为空返回true

# 文件
-f -d -e -r -x -w

# 比较
-eq -ne -ge -gt -le -lt

控制语句

# 判断
if
case

# 循环
for
while //条件为真
until //条件为flase
select

# break跳过当前循环 continue跳出整个循环

函数

命令的集合,完成特定功能的代码块;方便复用;类似变量,先定义才能执行;函数不调用不执行

#!/bin/bash
fun1(){
	echo "函数定义方式1"
}
fun1
function fun2 {
	echo "函数定义方式2"
}
fun2
function fun3(){
	echo "函数定义方式3"
}
fun3

debug

image-20231122203544617

脚本

服务启动脚本
⾃动化部署脚本
数据库备份脚本
业务监控脚本
安全防护脚本
⼯具封装
  • nginx安装:

软件包下载,解压,编译安装的参数配置,make&&make install,返回结果

  • 检查服务状态:

判断依赖命令telnet是否存在,测试端口,分析文件内容、判断结果,删除临时文件

image-20231122192943287
  • 检查主机存活状态:

ping目标主机3次,接收每次的状态值;判断结果,失败报警;释放变量unset

  • 监控cpu、内存和硬盘利用率:

top-n1获取当前cpu使用率,判断cpu使用率释放大于80%,发送报警邮件

获取总内存,使用内存;计算(用量*100/总内存);输出

磁盘监控遍历df -Th符合条件的磁盘数据,判断并输出结果,发送报警邮件

  • 监控接口:

curl(先判断该命令),curl访问并输入临时文件mktemp /tmp/check_url.XXX,截取状态码,判断并输出结果,删除临时文件

  • 应用程序启动脚本:(根据pid或端口判断)

    • go程序

    定义判断pid的函数,case判断输入,调用对应函数执行

    • java程序
  • mysql备份脚本

定义备份文件、mysql连接参数;执行备份命令;输出备份结果

服务管理进程管理工具-supervisor

所有的模块服务启动使⽤Supervisor 进程管理⼯具或者systemd 进⾏管理