目录
三、查看当前内存的总大小、实际使用大小、剩余大小、显示使用率百分比的脚本
五、把当前目录(包含子目录)下所有后缀为 ".sh" 的文件后缀变更为 ".shell",之后删除每个文件的第二行。
因新接触shell脚本,所以只能一直统计和手机不一样的shell脚本,水平有限,希望可以帮助到大家如果有错误的地方欢迎大家及时指出,我们共同进步,(#^.^#)。
一、配置环境的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使用率。下面是对脚本中各部分的解析:
-
#!/bin/bash
:指定脚本采用Bash解释器。 -
#mpy
:注释,用于说明脚本的用途。 -
while true
:一个无限循环,表示脚本会一直执行下去。 -
dotimes=10
:设置一个变量dotimes的值为10。 -
disk=$(df -Th | awk '{ print $6 }' | awk 'NR==6' |cut -d "%" -f 1)
:使用df命令获取磁盘信息,并使用awk和cut命令提取出磁盘使用率的数值部分。 -
mem=$(free -m | grep "Mem" | awk '{ printf "%.0f", $3/$2 * 100 }')
:使用free命令获取内存信息,再使用awk命令计算内存使用率百分比。 -
cpu=$(top -n 1 | grep "Cpu(s)" | awk '{ printf "%.0f", $2+$4 }')
:使用top命令获取CPU信息,并使用awk命令计算CPU使用率百分比。 -
echo "******************"
:打印分隔线。 -
echo "CPU使用率$cpu %"
:打印CPU使用率。 -
echo "内存使用率$mem %"
:打印内存使用率。 -
echo "磁盘使用率$disk %"
:打印磁盘使用率。 -
echo "******************"
:打印分隔线。 -
disk1=80
:设置一个变量disk1的值为80,表示磁盘使用率的阈值。 -
mem1=80
:设置一个变量mem1的值为80,表示内存使用率的阈值。 -
cpu1=80
:设置一个变量cpu1的值为80,表示CPU使用率的阈值。 -
if [ "$mem" -ge "$mem1" ]; then
:如果内存使用率大于等于阈值mem1,则执行下面的命令。 -
echo "内存使用已到$mem %,请注意" && exit 0
:打印内存使用率达到阈值的警告信息,并退出脚本。 -
if [ $cpu -ge $cpu1 ]; then
:如果CPU使用率大于等于阈值cpu1,则执行下面的命令。 -
echo "CPU使用已到$cpu %,请注意" && exit 0
:打印CPU使用率达到阈值的警告信息,并退出脚本。 -
if [ $disk -ge $disk1 ]; then
:如果磁盘使用率大于等于阈值disk1,则执行下面的命令。 -
echo "磁盘使用已到$disk ,请注意" && exit 0
:打印磁盘使用率达到阈值的警告信息,并退出脚本。 -
sleep $times
:暂停脚本执行一段时间,时间长度由变量times指定。 -
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
升序显示
七、磁盘使用率检测脚本
一、首先lsblk 查看一下磁盘情况
echo fdisk.sh 创建
二、进入编写脚本
#!/bin/bash
# 截取IP
IP=`ifconfig eth0 |awk -F " " 'NR==2{print $2}'`
# 定义使用率,并转换为数字
SPACE=`df -Ph |awk '{print int($5)}'`
for i in $SPACE
do
if [ $i -ge 80 ]
then
echo "$IP的磁盘使用率已经超过了80%,请及时处理"
fi
done
授权、并验证结果
如果把脚本内容改为90则,验证的时候会提示超过百分之九十
./fdisk.sh 验证
八、备份当前日期文件
一、编写脚本
#!/bin/bash
#一月前
historyTime=$(date "+%Y-%m-%d %H" -d '1 month ago')
echo ${historyTime}
historyTimeStamp=$(date -d "$historyTime" +%s)
echo ${historyTimeStamp}
#一周前
date_this_month=`date +%Y%m01`
#一天前
date_today=`date -d '1 day ago' +%Y%m%d`
这是一个Bash脚本,下面是对每个部分的解释:
-
historyTime=$(date "+%Y-%m-%d %H" -d '1 month ago')
:获取一月前的日期和时间,并将其存储在变量historyTime
中。date
命令的-d
选项用于指定日期,"+%Y-%m-%d %H"
表示输出格式为年-月-日 小时。 -
echo ${historyTime}
:打印变量historyTime
的值,即一月前的日期和时间。 -
historyTimeStamp=$(date -d "$historyTime" +%s)
:将变量historyTime
转换成时间戳格式并存储在变量historyTimeStamp
中。date
命令的-d
选项用于指定日期,+%s
表示输出时间戳。 -
echo ${historyTimeStamp}
:打印变量historyTimeStamp
的值,即一月前的时间戳。 -
date_this_month=
date +%Y%m01``:获取当月的年和月,并在末尾添加"01",表示当月的第一天。结果存储在变量date_this_month
中。 -
date_today=
date -d '1 day ago' +%Y%m%d``:获取昨天的日期,并以年月日的格式存储在变量date_today
中。
这段脚本的目的是获取一月前的日期和时间,并将其转换成时间戳格式。然后,获取当月的第一天的日期和昨天的日期。
二、脚本结果验证
root@localhost ~]# ./jiaoben.sh
2023-07-29 21
1690635600