当前位置: 首页 > news >正文

Linux——Shell

if 语句

格式:if list; then list; [ elif list; then list; ] ... [ else list; ] fi

单分支

if 条件表达式; then

        命令

fi 

示例:

#!/bin/bash

N=10 if [ $N -gt 5 ]; then

        echo yes

fi

# bash test.sh

yes 

双分支

if 条件表达式; then

        命令

else

        命令

fi 

示例

#!/bin/bash

N=10

if [ $N -lt 5 ]; then

        echo yes

else

        echo no

fi

# bash test.sh

no 

多分支

if

条件表达式; then

        命令

elif条件表达式; then

        命令

else

        命令

fi 

示例

#!/bin/bash

N=$1

if [ $N -eq 3 ]; then

        echo "eq 3"

elif [ $N -eq 5 ]; then

        echo "eq 5"

elif [ $N -eq 8 ]; then

        echo "eq 8"

else

        echo "no"

fi 

实验

 1、判断当前磁盘剩余空间是否有20G,如果小于20G,则将报警邮件发送给管理员,每天检查一次磁盘剩余空间。

1)测试是否连接外网

[root@localhost scripts]# ping baidu.com

2)保证防火墙和selinux已关闭

[root@localhost scripts]# systemctl stop firewalld.service 
[root@localhost scripts]# setenforce 0

3)安装sendmail和mailx

[root@localhost ~]# yum -y install sendmail mailx

4)启动

[root@localhost ~]# systemctl start sendmail

5)获取邮箱授权码

前往邮箱官网(POP3/SMTP/IMAP)

 找到IMAP/SMTP,开启服务(需要验证码等)。收到授权码后,复制授权码

6)编辑/etc/mail.rc文件

[root@localhost scripts]# vim /etc/mail.rc 

set from=15009281620@163.com  #对方收到邮件时显示的发件人
set smtp=smtp.163.com #163邮箱地址
set smtp-auth-user=15009281620@163.com   #邮箱账号
set smtp-auth-password=JCocvdssJMCO #授权密码
set smtp-auth=login  #smtp的认证方式,默认是login,也可以改为CRAM—MD5或PLAIN方式
 

7)测试是否能发送消息

echo 内容|mail -s“主题”收件人

[root@localhost scripts]# echo "hello " | mail -s "hello" 15009281620@163.com

8)创建脚本文件

[root@localhost scripts]# vim Mem.sh   #创建脚本文件

9)编辑脚本文件

脚本解析:

free -g | grep "Mem" | tr -s " " | cut -d" " -f 4

查看内存容量(-g)以G为单位查看,过滤“Mem”内存信息,去除空格,以空格为间隔,切除第四列信息。这就是我们需要的内存剩余容量

#!/bin/bash
##############################################################
# File Name: free.sh
# Version: V1.0
# Author: Gao_XY
# Email: Gao_XY@163.com
# Organization:https://blog.csdn.net/ens33?type=blog
# Created Time : 2024-12-12 22:29:59
# Description:
##############################################################
a=`free -g | grep "Mem" | tr -s " " | cut -d" " -f 4`  #定义变量,剩余容量为a变量
b=20                                                                  #定义需要比较的20为b变量
c="内存小于 $b  G "                                           #定义发送邮件的内容为c变量
if [ $a -le $b  ]                                                #if单分支,如果变量a小于变量b
then
 echo $c | mail -s "内存警报" 15009281620@163.com  #那么向邮箱发送邮件
fi

10)配置计划任务

[root@localhost etc]# crontab -e

0 0 */1 * * /bin/sh /scripts/Mem.sh    #每天整点,执行Mem.sh文件

11)测试成功


2、判断web服务是否运行(如果没有运行,则启动该服务并配置防火墙规则。)

1、查看进程的方式判断该程序是否运行

1)创建脚本文件

[root@localhost scripts]# vim web_course.sh

2)编辑脚本文件

脚本解析:

ps -ef | grep nginx | grep -v grep | wc -l

查看进程  过滤nginx  过滤掉grep自身的进程   统计行数

其中的grep -v grep 是干啥的呢 ?
很简单 ,为了去除包含grep的进程行,避免影响最终数据的正确性

#!/bin/bash
##############################################################
# File Name: web_course.sh
# Version: V1.0
# Author: Gao_XY
# Email: Gao_XY@163.com
# Organization:https://blog.csdn.net/ens33?type=blog
# Created Time : 2024-12-13 01:53:33
# Description:
##############################################################
course=` ps -ef | grep nginx | grep -v grep | wc -l`   #将过滤统计出来的进程行号进行定义
if [ $course -gt 0 ]                                        #如果进程的行号大于0
then
        echo "nginx is running..."                #那么该服务启动
else                                                        #否则启动该服务,并在防火墙放通该端口
        firewall-cmd --permanent --zone=public --add-port=80/tcp &>/etc/null
        systemctl start nginx
fi

3)测试

先停止web服务,执行脚本进行测试

查看web服务是否开启

root@localhost scripts]# systemctl is-active nginx.service 

2、通过查看端口的方式判断该程序是否运行

1)创建脚本文件

[root@localhost scripts]# vim web_port.sh

2)编辑脚本文件

脚本解析:

ss -lnupt | grep 80 &>/etc/null           #查看80端口号,把查询结果送入黑洞

$?                       # 返回上一条命令是否执行成功,0 为执行成功,非 0 则为执行失败

echo $?                #当执行该结果为0时,证明服务已启动

当服务没有启动的情况下,无法查询到80端口,“$?”就无法返回0。

#!/bin/bash
##############################################################
# File Name: web.sh
# Version: V1.0
# Author: Gao_XY
# Email: Gao_XY@163.com
# Organization:https://blog.csdn.net/ens33?type=blog
# Created Time : 2024-12-13 01:03:06
# Description:
##############################################################
ss -lnupt | grep 80 &>/etc/null        #查询80端口,将结果存入黑洞
port=`echo $?`     #定义测试指令为port变量,测试上一条指令是否执行成功

if [ $port == 0 ]        #如果结果为0
then
        echo "nginx is running..."         #那么执行成功
else                                        #否则开启服务,并配置防火墙放行该端口
        firewall-cmd --permanent --zone=public --add-port=80/tcp &>/etc/null
        systemctl start nginx
fi

3)测试

查看服务是否开启

[root@localhost scripts]# systemctl is-active nginx.service 

http://www.lryc.cn/news/505690.html

相关文章:

  • armsom产品编译烧录Linux固件
  • VSCode:Markdown插件安装使用 -- 最简洁的VSCode中Markdown插件安装使用
  • AI 行业发展趋势:科技创新引领未来变革
  • FB爆款打法实操经验总结
  • 微信小程序TTS解决方案
  • centos stream 8下载安装遇到的坑
  • 计算机网络——期末复习(1)背诵
  • AORO M6 Pro单北斗防爆终端全面国产化,关键技术不再“卡脖子”
  • ubuntu 卸载 MySQL
  • 6、基于SpringBoot的网上购物系统
  • AMS1117芯片驱动电路·降压芯片的驱动电路详解
  • 数据仓库工具箱—读书笔记02(Kimball维度建模技术概述02、事实表技术基础)
  • SAP ABAP-日期格式问题 SAP内部错误,反序列化JSON字符串时发生异常 值 20241215 不是根据 ABAP 的 XML 格式的有效日期
  • Linux-ubuntu点LED灯C语言版
  • ASP.NET|日常开发中数据集合详解
  • Pytest-Bdd vs Behave:选择最适合的 Python BDD 框架
  • Unity3D Shader变体自定义组合压缩方案详解
  • QT使用promoted后样式(setStyleSheet)不生效问题解决
  • Vue3有哪些好用的处理大数据量虚拟表格组件呢?
  • Java学习教程,从入门到精通,Java LinkedList(链表)语法知识点及案例代码(62)
  • 设计模式——Singleton(单例)设计模式
  • 深入理解 CSS 文本换行: overflow-wrap 和 word-break
  • Java-27 深入浅出 Spring - 实现简易Ioc-03 在上节的业务下手动实现IoC
  • kubernetes学习-使用metrics-server监控集群资源和查看日志
  • 解决 Git Permission denied 问题
  • CCNP_SEC_ASA 第三天作业
  • TypeError: Cannot read properties of null (reading ‘ce‘)
  • AdminJS - 集成 MySQL 的现代化管理面板开发指南
  • 上传文件(vue3)
  • 【Win10 环境vscode配置boost】