首页 > 系统相关 >shell

shell

时间:2023-11-22 20:45:12浏览次数:27  
标签:shell url echo 判断 数组 array bash

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 进⾏管理

标签:shell,url,echo,判断,数组,array,bash
From: https://www.cnblogs.com/mononoke/p/17850246.html

相关文章

  • shell 编程之循环语句与函数 一
    shell循环:一定要跳出循环的条件1、已知循环的次数(来10个新人新建10个账号)2、未知的循环的次数,但是有一个跳出条件(女朋友生气,道歉到原谅)循环语句for(已知次数)while(限定条件,条件如果成功执行,不成功则不执行)until(限定条件,条件成功不执行,不成功则执行) forfor......
  • shell脚本——循环脚本
    循环语句一定要有跳出循环的条件1、已知循环次数(来10个新人,新建10个账号)2、未知循环的次数,但是有一个跳出的条件(女朋友生气,道歉道到原凉)for循环:(已知次数)for 名称(自定义名称)in 词语; do 命令序列; done循环列表只是跟循环的次数有关如果循环列表有6个值,循环6......
  • Linux系统下shell的使用
    一、什么是shell文字操作系统与外部最主要的接口就叫做shell。shell是操作系统最外面的一层。shell管理与操作系统之间的交互:等待你输入,向操作系统解释你的输入,并且处理各种各样的操作系统的输出结果。shell提供了你与操作系统之间通讯的方式。这种通讯可以以交互方式(从​​键盘......
  • VMware虚拟机如何联网、Xshell连接Linux虚拟机
     VMware虚拟机联网1、首先,在VMware界面单击虚拟机,点击编辑虚拟机设置,将网络适配器中的网络连接改为NAT模式。如下图所示: 2、然后,开启虚拟机,以root用户登录,进入终端,输入命令ifconfig查看当前系统所用的网卡接口,找到ens33。如下图: 3、输入以下指令:vim /etc/sysco......
  • shell 编程条件语句
    shelltest  测试0为真test-a/etc/fstabecho$?test-e/etc/fstabecho$? -a,-e#测试文件是否存在-a有bug#取反会有变化test+选项对象参数test-f#只看文件-r#是否有读的权限-w#是否有写的权限-x#是否有执行的权限-d#目录-f#文件[-e/etc/fs......
  • jmeter beanshell常见问题:"BeanShellInterpreter: Error invoking bsh method: eval
    jmeter使用beanshell文件经常会遇到这个问题:BeanShellInterpreter:Errorinvokingbshmethod:evalInfile:inlineevaluationof.... 原因可能有:1.jar包没有放入对应位置解决:放到lib/ext目录下,并且重启jmeter2.beanshell不支持java泛型,如List<String>list=newAr......
  • Linux的shell脚本中的比较运算符
    shell中的比较运算符-eq    //等于-ne    //不等于-gt    //大于(greater)-lt     //小于 (less)-ge    //大于等于-le    //小于等于在今天的Linux——shell命令实验中,执行.sh脚本:if((a<60));thenecho"Youdidn'tpassthe......
  • shell 展开之进程替换# 深度解析 管道符|和输入输出<< >>重定向的区别
    参考链接https://blog.csdn.net/zwlove5280/article/details/113609342shell展开中的进程替换可以说是非常难懂的一部分,它的语法为有两种>(list)##接受输入看作一个整体,相当于文件描述或<(list)#接受输出在<<TheLinuxCommandLine>>一书中提到了这样一个事,代码......
  • 初始shell脚本
    初始shellshell脚本大致分为四种类型记叙型:像写作文一样,一件事一件事的写判断型:会根据内容选项进行选择循环型:混合型:集结了上述的三种类型 面向对象:开发在开发的时候将任务当成一个整体面向过程:开发的时候需要一步一步执行shell是一个命令解释器,在操作系统的最外层,负责......
  • linux 系统shell脚本防止同一时间被多次重复执行
    前言当shell脚本中需要执行的步骤较多、耗时较长时,为了避免脚本被其它进程重复执行导致操作逻辑被打乱,需要使该脚本同一时间内只能被一个进程执行,类似C#中的lock代码块操作,确保线程安全代码#!/bin/bash#创建文件锁路径lock_file=/tmp/my_script.lock#信号处理函数fun......