shell脚本实战

news/2024/11/14 11:53:25/

一、系统性能监控脚本

#!/bin/bash
# 系统性能监控脚本
# 时间
Time=$(date +"%Y-%m-%d %H:%M:%S")
# ip
ip=$(ifconfig ens32 | grep -w inet | awk '{print $2}')
# 内存剩余空间
a=$(cat /proc/meminfo | grep -i avai | awk '{print $2}')
free_mem=$(($a / 1024))
# 磁盘剩余空间
b=$(df | grep "/$" | awk '{print $4}')
free_disk=$(($b / 1024 / 1024))
# 已登录用户
users=$(who | wc -l)
# 当前进程数
procs=$(ps aux | wc -l)
warn=/root/warning
mkdir -p $warn
if [ $free_mem -lt 1024 ];then
echo -e "$Time,内存剩余不足1G!\n当前内存剩余:
$free_mem\n主机IP:$ip">>$warn/mem_warning
else
echo "$Time,内存剩余容量正常" >> $warn/mem_warning
fi
if [ $free_disk -lt 10 ];then
echo -e "$Time,磁盘剩余不足10G!\n当前磁盘剩余:
$free_disk\n主机IP:$ip">>$warn/disk_warning
else
echo "$Time,磁盘剩余容量正常" >> $warn/disk_warning
fi
if [ $users -gt 3 ];then
echo -e "$Time,当前用户登录过多!\n当前用户数:$users\n
主机IP:$ip">>$warn/user_warning
else
echo "$Time,登录用户正常" >> $warn/user_warning
fi
if [ $procs -gt 500 ];then
echo -e "$Time,进程数量过多!\n当前进程数:$procs\n主机
IP:$ip">>$warn/procs_warning
else
echo "$Time,进程数正常" >> $warn/procs_warning
fi
#!/bin/bash
g='\e[1;32m'
e='\e[0m'
prin(){
echo -e "$1"
}
cpu_red(){
#内核数[即线程]
cpu_processor=`grep processor /proc/cpuinfo | wc -
l`
#CPU数量[即多路]
cpu_number=`cat /proc/cpuinfo| grep "physical id"|
sort| uniq| wc -l`
#CPU物理内核
cpu_core=`cat /proc/cpuinfo | grep "cpu cores" |
sed -n '1p' | awk '{print $4}'`
#CPU型号
cpu_info=`cat /proc/cpuinfo | grep name | cut -f2
-d: | uniq -c`
}
mem_red(){
#总内存[单位MB]
total=`free -m | grep -v "Swap" | awk '{print $2}'
| sed -n "2p"`
used=`free -m | grep -v "Swap" | sed -n '2p' | awk
'{print $3}'`
free=`free -m | grep -v "Swap" | sed -n '2p'| awk
'{print $4}'`
shared=`free -m | grep -v "Swap" | sed -n '2p' |
awk '{print $5}'`
cache=`free -m | grep -v "Swap" | sed -n '2p' |
awk '{print $6}'`
}
print_cpu(){
cpu_red
echo -e "CPU物理数:${g}${cpu_number}${e}\nCPU内核
数:${g}${cpu_core}${e}\nCPU型号:${g}${cpu_info}${e}"
if [[ ${cpu_core} == ${cpu_processor} ]];then
echo -e "超线程:${g}支持${e}"
else
echo -e "超线程:${g}不支持${e}"
fi
}
print_mem(){
mem_red
d="当前主机内存信息 总内存:${g}${total}MB${e} 当前已
用:${g}${used}MB${e} 当前可用:${g}${free}MB${e} 共享占
用:${g}${shared}MB${e} 缓存占用:${g}${cache}MB${e}"
for i in $d;do
prin "$i"
done
}
print_cpu
print_mem

 二、菜单脚本

#!/bin/bash
clear
echo -e "\033[33m—————————————————————————————————\033[0m"
echo -e "|\e[2;12H\033[43;30m这里是菜单\033[0m\t\t|"
echo -e "\033[33m—————————————————————————————————\033[0m"
echo -e "|\e[36m1.查看网卡信息\e[0m\t\t\t|"
echo -e "|\e[34m2.查看内存信息\e[0m\t\t\t|"
echo -e "|\e[35m3.查看磁盘信息\e[0m\t\t\t|"
echo -e "|\e[32m4.查看CPU信息\e[0m\t\t\t|"
echo -e "|\e[33m5.查看账户信息\e[0m\t\t\t|"
echo -e "\033[33m—————————————————————————————————\033[0m"
echo
read -p "请输入选项[1-5]:" key
case $key in
1)
ens=`ifconfig|head -1|awk -F':' '{print
$1}'`
ip=`ifconfig|head -2|tail -1|awk '{print
$2}'`
run=`ifconfig ens32|head -1|awk -F','
'{print $3}'`
echo -e "网卡名称:$ens\nIP地址:$ip\n启动状
态:$run"
;;
2)
a=$(free |grep Mem |tr -s " " | cut -d" "
-f7)
mem=$(echo "scale=2;$a / 1024"|bc -l)
echo "当前内存剩余容量:${mem}M"
;;
3)
b=$(df | grep /$ | tr -s " " | cut -d " "
-f4)
disk=$(echo "scale=2;$b / 1024"|bc -l)
echo "当前磁盘剩余容量:${disk}M"
;;
4)
cpu=$(uptime | tr -s " " | cut -d" " -f12)
echo "本机CPU的15分钟的平均负载为:$cpu"
;;
5)
login_num=$(who | wc -l)
total_num=$(cat /etc/passwd | wc -l)
echo "当前系统登录账户:$USER"
echo "当前登陆系统的账户数量为:$login_number"
echo "当前系统中总⽤户数量为:$total_number"
;;
*)
echo "您输入的序号有误,请重新输入!"
exit 1
;;
esac

三、nginx 启动脚本

#!/bin/bash
nginx="/usr/local/nginx"
pid="/usr/local/nginx/logs/nginx.pid"
case $1 in
start)
if [ -f $pid ];then
echo -e "\033[91mNginx运行
中...\033[0m"
exit 1
else
$nginx && echo -e "\033[32mNginx已
启动 ~\033[0m"
fi
;;
stop)
if [ ! -f $pid ];then
echo -e "\033[91mNginx未运行!
\033[0m"
exit 2
else
$nginx -s stop && echo -e
"\033[32mNginx已停止!\033[0m"
fi
;;
restart)
if [ ! -f $pid ];then
echo -e "\033[91mNginx未运行!
\033[0m"
echo -e "\033[91m请先启动Nginx!
\033[0m"
exit 3
else
$nginx -s stop && $nginx && echo -
e "\033[32mNginx已重启!\033[0m"
fi
;;
status)
if [ -f $pid ];then
echo -e "\033[32mNginx运行
中...\033[0m"
else
echo -e "\033[91mNginx未运行!
\033[0m"
fi
;;
reload)
if [ ! -f $pid ];then
echo -e "\033[91mNginx未运行!
\033[0m"
exit 4
else
$nginx -s reload && echo -e
"\033[32mNginx配置文件已重新载入...\033[0m"
fi
;;
*)
echo "输入错误!格式:$0
[start|stop|restart|status|reload]"
;;
esac

四、简易猜拳脚本

#!/bin/bash
computer=$[RANDOM%3+1]
g='\e[1;32m'
e='\e[0m'
clear
echo -e "${g}—————————————————————————————————${e}"
echo -e "${g}#\t 石头剪刀布游戏\t\t#${e}"
echo -e "${g}—————————————————————————————————${e}"
echo -e "${g}#${e} 请输入对应序号出拳 \t${g}#${e}"
echo -e "${g}—————————————————————————————————${e}"
echo -e "${g}#${e}\t\033[33m1.剪刀\033[0m\t\t\t${g}#${e}"
echo -e "${g}#${e}\t\033[35m2.石头\033[0m\t\t\t${g}#${e}"
echo -e "${g}#${e}\t\033[31m3.布\033[0m\t\t\t${g}#${e}"
echo -e "${g}—————————————————————————————————${e}"
echo
read -p "请输入序号[1-3]:" person
case $person in
1)
if [[ $computer == 1 ]];then
echo -e "${g}
—————————————————————————————————${e}"
echo -e "${g}|\t 您出:剪刀
\t\t|${e}"
echo -e "${g}
—————————————————————————————————${e}"
echo -e "${g}|\t 计算机:石头
\t|${e}"
echo -e "${g}
—————————————————————————————————${e}"
echo -e "${g}|\t 计算机赢!
\t\t|${e}"
echo -e "${g}
—————————————————————————————————${e}"
elif [[ $computer == 2 ]];then
echo -e "${g}
—————————————————————————————————${e}"
echo -e "${g}|\t 您出:剪刀
\t\t|${e}"
echo -e "${g}
—————————————————————————————————${e}"
echo -e "${g}|\t 计算机:剪刀
\t|${e}"
echo -e "${g}
—————————————————————————————————${e}"
echo -e "${g}|\t 平局
~\t\t|${e}"
echo -e "${g}
—————————————————————————————————${e}"
elif [[ $computer == 3 ]];then
echo -e "${g}
—————————————————————————————————${e}"
echo -e "${g}|\t 您出:剪刀
\t\t|${e}"
echo -e "${g}
—————————————————————————————————${e}"
echo -e "${g}|\t 计算机:布
\t\t|${e}"
echo -e "${g}
—————————————————————————————————${e}"
echo -e "${g}|\t 恭喜,您获胜!
\t|${e}"
echo -e "${g}
—————————————————————————————————${e}"
fi;;
2)
if [[ $computer == 1 ]];then
echo -e "${g}
—————————————————————————————————${e}"
echo -e "${g}|\t 您出:石头
\t\t|${e}"
echo -e "${g}
—————————————————————————————————${e}"
echo -e "${g}|\t 计算机:石头
\t|${e}"
echo -e "${g}
—————————————————————————————————${e}"
echo -e "${g}|\t 平局
~\t\t|${e}"
echo -e "${g}
—————————————————————————————————${e}"
elif [[ $computer == 2 ]];then
echo -e "${g}
—————————————————————————————————${e}"
echo -e "${g}|\t 您出:石头
\t\t|${e}"
echo -e "${g}
—————————————————————————————————${e}"
echo -e "${g}|\t 计算机:剪刀
\t|${e}"
echo -e "${g}
—————————————————————————————————${e}"
echo -e "${g}|\t 恭喜,您获胜!
\t|${e}"
echo -e "${g}
—————————————————————————————————${e}"
elif [[ $computer == 3 ]];then
echo -e "${g}
—————————————————————————————————${e}"
echo -e "${g}|\t 您出:石头
\t\t|${e}"
echo -e "${g}
—————————————————————————————————${e}"
echo -e "${g}|\t 计算机:布
\t\t|${e}"
echo -e "${g}
—————————————————————————————————${e}"
echo -e "${g}|\t 计算机赢!
\t\t|${e}"
echo -e "${g}
—————————————————————————————————${e}"
fi;;
3)
if [[ $computer == 1 ]];then
echo -e "${g}
—————————————————————————————————${e}"
echo -e "${g}|\t 您出:布
\t\t|${e}"
echo -e "${g}
—————————————————————————————————${e}"
echo -e "${g}|\t 计算机:石头
\t|${e}"
echo -e "${g}
—————————————————————————————————${e}"
echo -e "${g}|\t 恭喜,您获胜!
\t|${e}"
echo -e "${g}
—————————————————————————————————${e}"
elif [[ $computer == 2 ]];then
echo -e "${g}
—————————————————————————————————${e}"
echo -e "${g}|\t 您出:布
\t\t|${e}"
echo -e "${g}
—————————————————————————————————${e}"
echo -e "${g}|\t 计算机:剪刀
\t|${e}"
echo -e "${g}
—————————————————————————————————${e}"
echo -e "${g}|\t 计算机胜!
\t|${e}"
echo -e "${g}
—————————————————————————————————${e}"
elif [[ $computer == 3 ]];then
echo -e "${g}
—————————————————————————————————${e}"
echo -e "${g}|\t 您出:布
\t\t|${e}"
echo -e "${g}
—————————————————————————————————${e}"
echo -e "${g}|\t 计算机:布
\t\t|${e}"
echo -e "${g}
—————————————————————————————————${e}"
echo -e "${g}|\t 平局
~\t\t|${e}"
echo -e "${g}
—————————————————————————————————${e}"
fi;;
*)
echo "请正确输入出拳序号!"
exit 1
;;
esac

五、随机双色球脚本

#!/bin/bash
RED_COL='\033[91m'
BLUE_COL='\033[34m'
NONE_COL='\033[0m'
red_ball=""
while :
do
clear
echo "---机选双色球---"
tmp=$[RANDOM%33+1]
if echo "$red_ball" | grep -q -w $tmp; then
continue
fi
red_ball+=" $tmp"
echo -en "$RED_COL$red_ball$NONE_COL"
word=$(echo "$red_ball" | wc -w)
if [ $word -eq 6 ]; then
blue_ball=$[RANDOM%16+1]
echo -e "$BLUE_COL $blue_ball$NONE_COL"
break
fi
sleep 0.5
done
BLUE_COL='\033[34m'
NONE_COL='\033[0m'
# 使用关联数组来存储选中的红球号码,方便后续检查是否重复选中
declare -A red_balls
# 生成1到33的随机数,检查是否已经选中,如果没有,则添加到red_balls数
组并输出
function select_red_ball {
local num=$(( RANDOM % 33 + 1 ))
if [[ -z ${red_balls[$num]} ]]; then
red_balls[$num]="true"
echo -e "$RED_COL $num$NONE_COL"
else
# 如果已经选中,则重新选择
select_red_ball
fi
sleep 0.5
}
# 生成1到16的随机数,作为蓝球号码并输出
function select_blue_ball {
local num=$(( RANDOM % 16 + 1 ))
echo -e "$BLUE_COL $num$NONE_COL"
}
clear
echo "红球号码:"
# 主循环,持续选择红球,直到选够6个为止
while [[ ${#red_balls[@]} -lt 6 ]]; do
select_red_ball
done
echo "蓝球号码:"
sleep 0.5
# 选择蓝球号码并输出
select_blue_ball

 


http://www.ppmy.cn/news/1501623.html

相关文章

Linux中/下各个文件的作用及粘滞位的前提和动静态库

boot : 存放于操作系统相关的信息 dev: 保存各种设备的信息 etc: 存放第三方软件的配置文件 home : 每个用户都会有一个home目录 lib/lib64: 保存各种库。 粘滞位的前提: 多用户进行数据共享时,可能将其他目录的权限全部公开…

【漏洞复现】phpStudy 小皮 Windows面板 存在RCE漏洞

靶场资料后台自行领取【靶场】 image-20240726092307252 PhpStudy小皮面板曝RCE漏洞,本质是存储型XSS引发。攻击者通过登录用户名输入XSS代码,结合后台计划任务功能,实现远程代码执行,严重威胁服务器安全。建议立即更新至安全版…

Spring Boot(八十二):SpringBoot通过rsa实现API加密

项目中使用RSA加密方式对API接口返回的数据加密,让API数据更加安全。别人无法对提供的数据进行破解。Spring Boot接口加密,可以对返回值、参数值通过注解的方式自动加解密 。 下面开始代码演示 1 接口加密 1.1 新建一个springboot项目 1.2 添加依赖 <dependency>&l…

黑马头条Day11- 实时计算热点文章、KafkaStream

一、今日内容 1. 定时计算与实时计算 2. 今日内容 KafkaStream 什么是流式计算KafkaStream概述KafkaStream入门案例SpringBoot集成KafkaStream 实时计算 用户行为发送消息KafkaStream聚合处理消息更新文章行为数量替换热点文章数据 二、实时流式计算 1. 概念 一般流式计…

Cocos Creator2D游戏开发(6)-飞机大战(4)-敌机产生

敌机产生&玩家发射子弹 敌机产生: 创建一个空节点 创建一个敌机预制体 把敌机图片拖入预制体内 使用代码生成敌机 让敌机动起来 创建一个预制体enemy_prefab双击预制体enemy_prefab,然后拖入一个敌机图片,设置好方向和尺寸,一定要记得保存然后关闭(场景编辑器里面的保存)…

【JavaEE】阻塞队列

目录 一.阻塞队列(Blocking Queue) 1.什么是阻塞队列 2.特性 二.生产者消费者模型 1.什么是生产者消费者模型&#xff1f; 2.生产者消费模型的好处 2.1解耦合 2.2削峰填谷 三.如何在java中使用阻塞队列 四.模拟实现阻塞队列 1.加锁 2.阻塞等待实现 3.解决interru…

python每日学习13:pandas库的用法(2)

python每日学习13&#xff1a;pandas库的用法&#xff08;2&#xff09; 建立索引:所有的数据框默认都已经使用从 0 开始的自然数索引&#xff0c;因此这里的"建立”索引指的是自定义索引 import pandas as pd import numpy as np df pd.DataFrame( {varl : 1.0, var2 :…

相机的内参与外参

目录 一、相机的内参二、相机的外参 一、相机的内参 如下图所示是相机的针孔模型示意图&#xff1a; 光心O所处平面是相机坐标系(O&#xff0c;P)&#xff0c;像素平面所在坐标系为像素坐标系(O’&#xff0c;P’)。 焦距f&#xff1a;O到O’的距离 相机的内参表示的是相机坐标…