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

shell 简单且常用的几种

目录

一、配置环境的shell脚本

 二、系统资源脚本

一、要求

二、脚本内容

三、脚本解析

四、赋权并验证

三、查看当前内存的总大小、实际使用大小、剩余大小、显示使用率百分比的脚本

一、第一种方法

二、验证

三、第二种方法

四、验证

四、查看网卡实时流量脚本

一、编辑脚本

 二、验证结果

五、把当前目录(包含子目录)下所有后缀为 ".sh" 的文件后缀变更为 ".shell",之后删除每个文件的第二行。

一、编写脚本

二、验证

六、统计访问最多的十个IP

一、首先模拟创建IP、编写脚本

二、验证ip生成结果


一、配置环境的shell脚本

systemctl stop firewalld

systemctl disable firewalld

systemctl stop NetworkManager

systemctl disable NetworkManager

setenforce 0

sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config

cat << e > /etc/sysconfig/network-scripts/ifcfg-ens33

TYPE=Ethernet

BOOTPROTO=static

NAME=ens33

DEVICE=ens33

ONBOOT=yes

IPADDR=$1

PREFIX=24

GATEWAY=192.168.115.2

DNS1=192.168.115.2

e

systemctl restart network

 将此脚本放入终端中,后续输入想设置的IP 则成功配置环境并设置ip 

 结果查看

 二、系统资源脚本

一、要求

1. 编写一个脚本来监控 CPU 使用率、内存使用率、磁盘空间等系统资源。
2. 实时显示系统资源的使用情况,并根据预设的阈值提供警报功能。
3. 脚本应该可以在后台运行,每隔一定时间自动更新资源状态。
4. 提供一个简单的用户界面(命令行或图形界面),方便用户查看当前系统资源的情况。

二、脚本内容

#!/bin/bash
#lsq
#监测脚本
while true
do
times=10
#磁盘
disk=$(df -Th | awk '{ print $6 }' | awk 'NR==6' |cut -d "%" -f 1)
#内存
mem=$(free -m | grep "Mem" | awk '{ printf "%.0f", $3/$2 * 100 }')
#cpu
cpu=$(top -n 1 | grep "Cpu(s)" | awk '{ printf "%.0f", $2+$4 }')
#显示监测情况:
        echo "******************"
        echo "CPU使用率$cpu %"
        echo "内存使用率$mem %"
        echo "磁盘使用率$disk %"
        echo "******************"
#——————————————————————————————————
disk1=80
mem1=80
cpu1=80
if [ "$mem" -ge "$mem1" ];then
        echo "内存使用已到$mem %,请注意" && exit 0
fi
if [ $cpu -ge $cpu1 ];then
        echo "CPU使用已到$cpu %,请注意" && exit 0
fi
if [ $disk -ge $disk1 ];then
        echo "磁盘使用已到$disk ,请注意" && exit 0
fi
sleep $times
done

三、脚本解析

这是一个监测脚本,用于监测系统的磁盘、内存和CPU使用率。下面是对脚本中各部分的解析:

  1. #!/bin/bash:指定脚本采用Bash解释器。

  2. #mpy:注释,用于说明脚本的用途。

  3. while true:一个无限循环,表示脚本会一直执行下去。

  4. dotimes=10:设置一个变量dotimes的值为10。

  5. disk=$(df -Th | awk '{ print $6 }' | awk 'NR==6' |cut -d "%" -f 1):使用df命令获取磁盘信息,并使用awk和cut命令提取出磁盘使用率的数值部分。

  6. mem=$(free -m | grep "Mem" | awk '{ printf "%.0f", $3/$2 * 100 }'):使用free命令获取内存信息,再使用awk命令计算内存使用率百分比。

  7. cpu=$(top -n 1 | grep "Cpu(s)" | awk '{ printf "%.0f", $2+$4 }'):使用top命令获取CPU信息,并使用awk命令计算CPU使用率百分比。

  8. echo "******************":打印分隔线。

  9. echo "CPU使用率$cpu %":打印CPU使用率。

  10. echo "内存使用率$mem %":打印内存使用率。

  11. echo "磁盘使用率$disk %":打印磁盘使用率。

  12. echo "******************":打印分隔线。

  13. disk1=80:设置一个变量disk1的值为80,表示磁盘使用率的阈值。

  14. mem1=80:设置一个变量mem1的值为80,表示内存使用率的阈值。

  15. cpu1=80:设置一个变量cpu1的值为80,表示CPU使用率的阈值。

  16. if [ "$mem" -ge "$mem1" ]; then:如果内存使用率大于等于阈值mem1,则执行下面的命令。

  17. echo "内存使用已到$mem %,请注意" && exit 0:打印内存使用率达到阈值的警告信息,并退出脚本。

  18. if [ $cpu -ge $cpu1 ]; then:如果CPU使用率大于等于阈值cpu1,则执行下面的命令。

  19. echo "CPU使用已到$cpu %,请注意" && exit 0:打印CPU使用率达到阈值的警告信息,并退出脚本。

  20. if [ $disk -ge $disk1 ]; then:如果磁盘使用率大于等于阈值disk1,则执行下面的命令。

  21. echo "磁盘使用已到$disk ,请注意" && exit 0:打印磁盘使用率达到阈值的警告信息,并退出脚本。

  22. sleep $times:暂停脚本执行一段时间,时间长度由变量times指定。

  23. done:结束while循环。

 

四、赋权并验证

三、查看当前内存的总大小、实际使用大小、剩余大小、显示使用率百分比的脚本

一、第一种方法

#!/bin/bash

Mem_all=$(free -m | awk '/Mem/ {print $2}')
Mem_used=$(free -m | awk '/Mem/ {print $3}')
Mem_free=$(free -m | awk '/Mem/ {print $4}')
Mem_usage=$(free -m | awk '/Mem/ {printf "%.0f", $3/$2 * 100}')

echo "当前内存总共: $Mem_all MB"
echo "当前内存已使用: $Mem_used MB"
echo "当前剩余: $Mem_free MB"
echo "当前物理内存使用率: $Mem_usage%" 

 

二、验证

三、第二种方法

#!/bin/bash

# 获取内存信息
mem_info=$(free -m | awk 'NR==2{print}')

# 获取内存总量、已使用量和剩余量(以兆字节为单位)
total=$(echo $mem_info | awk '{print $2}')
used=$(echo $mem_info | awk '{print $3}')
free=$(echo $mem_info | awk '{print $4}')

# 计算内存使用率
usage_percent=$(echo "scale=2; $used / $total * 100" | bc)

# 打印信息
echo "物理内存总量:${total}MB"
echo "已使用内存:${used}MB"
echo "剩余内存:${free}MB"
echo "内存使用率:${usage_percent}%"

四、验证

四、查看网卡实时流量脚本

一、编辑脚本

#!/bin/bash
NIC=ens33
echo -e " In ------ Out"
while true; do
        OLD_IN=$(awk '$0~"'$NIC'"{print $2}' /proc/net/dev)
        OLD_OUT=$(awk '$0~"'$NIC'"{print $10}' /proc/net/dev)
sleep 1
        NEW_IN=$(awk '$0~"'$NIC'"{print $2}' /proc/net/dev)
        NEW_OUT=$(awk '$0~"'$NIC'"{print $10}' /proc/net/dev)
        IN=$(printf "%.1f%s" "$((($NEW_IN-$OLD_IN)/1024))" "KB/s")
        OUT=$(printf "%.1f%s" "$((($NEW_OUT-$OLD_OUT)/1024))" "KB/s")
        echo "$IN $OUT"
        sleep 1
done


 二、验证结果

五、把当前目录(包含子目录)下所有后缀为 ".sh" 的文件后缀变更为 ".shell",之后删除每个文件的第二行。

先查看目录下的后缀文件

一、编写脚本

 #!/bin/bash

ALL_SH_FILE=$(find . -type f -name "*.sh")

        for file in ${ALL_SH_FILE[*]}

do

        filename=$(echo $file | awk -F'.sh' '{print $1}')

        new_filename="${filename}.shell"

        mv "$file" "$new_filename"

        sed -i '2d' "$new_filename"

done

二、验证

六、统计访问最多的十个IP

一、首先模拟创建IP、编写脚本

vim /makeiplog.sh

#!/bin/bash
for i in {1..30};do
        host=$[$RANDOM % 10]
        host1=$[$RANDOM % 10]

        echo "192.168.$host1.$host" >> /root/ip.log
done

 

赋权并启动

二、验证ip生成结果

 输入 vim ip.log 查看

输入命令 

awk '{a[$1]++}END{print "UV:",length(a);for(v in a)print v,a[v]}' ip.log |sort -k2 -nr |head -10

 显示结果

 

awk '{a[$1]++}END{print "UV:",length(a);for(v in a)print v,a[v]}' ip.log |sort -k2

升序显示

 

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

相关文章:

  • redis基本介绍以及在node中使用
  • React Native 文本输入基础知识
  • qt显示图片并转换成灰度图及伪彩图
  • oj在线编程输入输出
  • 【LeetCode 算法】Add Two Integers 两整数相加-位运算
  • 企业网络日志安全与 EventLog Analyzer
  • 清风数学建模——拟合算法
  • 单片机 (一) 让LED灯 亮
  • c++——单例模式
  • C# 流Stream详解(2)——FileStream、BinaryReader、MemorySream、SreamReader等之间的关系
  • 【JavaSE】详解final关键字
  • 问道管理:机器人概念走势活跃,新时达涨停,拓斯达、丰立智能等大涨
  • elementui 修改日期选择器el-date-picker样式
  • 自己实现 SpringMVC 底层机制 系列之-实现任务阶段 6-完成控制器方法获取参数-@RequestParam
  • 数据可视化:图表绘制详解
  • 【中危】Apache Ivy<2.5.2 存在XXE漏洞 (CVE-2022-46751)
  • C#使用自定义的比较器对版本号(编码)字符串进行排序
  • AI在日常生活中的应用:从语音助手到自动驾驶
  • Windows10查看图片的分辨率
  • Spring事务和事务传播机制(2)
  • 计算机视觉 -- 图像分割
  • ubuntu18.04复现yolo v8之CUDA与pytorch版本问题以及多CUDA版本安装及切换
  • Redis三种模式——主从复制,哨兵模式,集群
  • mysql8.0.31新增只读远程普通用户
  • 揭开路由协议隐藏的风险
  • 图片因固定宽高被拉伸了?object-fit:一个神奇的属性
  • 客户案例:中圣科技—CAC2.0防范盗号威胁,加固安全防线
  • pandas数据分析40——读取 excel 合并单元格的表头
  • Java后端开发面试题——微服务篇总结
  • 第十一章MyBatis查询专题