shall的两个小练习

1、实现监控主机磁盘/CPU/内存使用率,超过阈值,提示告警信息.
要求:a)阈值必须是参数输入
b)告警信息必须至少包含:告警时间,告警磁盘名称,以及当前使用率等信息
c)告警提示信息必须能够显示在屏幕上,且越美观越好

#!/bin/bash
#监测磁盘
echo "当前时间:`date +%Y%m%d%H%M%S`"
curD=`df -TPh`
cat /dev/null>a.txt
echo "$curD">>a.txt
for((i=1;i<=1;i++))
	do
		`sed -i '1d' a.txt`
	done
aimdiskvalue=$1
diskresult=$(echo | awk '  
{ 
if(+$6>'''$aimdiskvalue''') 
print "警告!超过磁盘阈值:" "'''$aimdiskvalue'''%。"  "当前使用率:" $6 ",所属空间:" $7 "";}' a.txt) 
echo "$diskresult"
echo "**************************************************************************"
#监测cpu
curC=`top -b -n 1 -d 3`
#清空目标文件
cat /dev/null>b.txt
echo "$curC">>b.txt
#删除前七行无用的数据
for((i=1;i<=7;i++))
	do
		`sed -i '1d' b.txt`
	done

aimcpuvalue=$2
cpuresult=$(echo |awk ' 
{ 
	if($9>'''$aimcpuvalue''')
	{
		printf( "警告!超过cup阈值%s%。",'''$aimcpuvalue''' ); 
		
		printf( "当前使用率:%s% 所属ID: %s\n",$9,$1);
	}
}' b.txt) 
echo "$cpuresult"
echo "**************************************************************************"
#内存cpu
curR=`free`
#清空目标文件
cat /dev/null>c.txt
echo "$curR">>c.txt
#删除前1行无用的数据
for((i=1;i<=1;i++))
	do
		`sed -i '1d' c.txt`
	done
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200706214214733.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3R1Ym9zaHVTaGFvQmFUdQ==,size_16,color_FFFFFF,t_70#pic_center)
aimramvalue=$3
ramresult=$(echo |awk ' 
{ 
	if(strtonum($3)/strtonum($2)>'''$aimramvalue''')
	{
		printf( "警告!超过内存阈值%s。",'''$aimramvalue''' ); 
		
		printf( "当前使用率:%s% 所属名称: %s\n",strtonum($3)/strtonum($2),$1);
	}
}' c.txt) 
echo "$ramresult"
echo "**************************************************************************"

运行结果如下:
shall的两个小练习_第1张图片

2、实现输入一个人生日,计算当前时间距离生日还有多少天,并提示生日快乐!
要求:a)生日必须作为参数任意输入
b)如果输入生日格式不对,需要能够自动识别和告警,提示重新输入
c)如果输入日期刚好当天就是生日,需要提示生日快乐!

#!/bin/bash
#生日问题
echo "当前时间:`date +%Y%m%d`"
currentY=`date +%Y`
currentM=`date +%m`
currentD=`date +%d`

echo "请输入格式为0110,代表生日为1月10日"
read birthDay
birthM=${birthDay:0:2}
birthD=${birthDay:2:2}
ifmore=0
getIfMore(){
	if(($(($currentY % 4))==0));
	then
		if(($(($currentY % 100))==0));
		then
			if(($(($currentY % 400))==0));
			then
				ifmore=1
			else
				ifmore=0
			fi
		fi
		ifmore=1	
	else
		ifmore=0
	fi

}

todaythisyearsdays=0
birthdatthisyearsdays=0
#获取今天是今年的第几天
getthisyeardays() {
	aimmonth=0
	if(($[1]==1));
	then
		aimmonth="Jan"
	elif(($[1]==2));
	then
		aimmonth="Feb"
	elif(($[1]==3));
	then
		aimmonth="Mar"
	elif(($[1]==4)); 
	then
		aimmonth="Apr"
	elif(($[1]==5));
	then
		aimmonth="May"
	elif(($[1]==6));
	then
		aimmonth="Jun"
	elif(($[1]==7));
	then
		aimmonth="Jul"
	elif(($[1]==8));
	then
		aimmonth="Aug"
	elif(($[1]==9));
	then
		aimmonth="Sep"
	elif(($[1]==10));
	then
		aimmonth="Oct"
	elif(($[1]==11));
	then
		aimmonth="Nov"
	else
		aimmonth="Dec"
	fi
	if [ $3 == "t" ]
	then
	     echo "75"
		todaythisyearsdays=`date -d "$2 $aimmonth" +%j`
		echo "$todaythisyearsdays"
	else
	 	echo "78"
		birthdatthisyearsdays=`date -d "$2 $aimmonth" +%j`
		echo "$birthdatthisyearsdays"
	fi
}
#获取下一个生日的日期
getnextbirthday(){
	getthisyeardays $currentM $currentD "t"
	getthisyeardays $birthM $birthD "b"
	#if((birthM==2&&birthD==29));
	#then	
	if((todaythisyearsdays > birthdatthisyearsdays));
	then
		let cresult=$[todaythisyearsdays]+0-$[birthdatthisyearsdays]
		if((ifmore==1));
		then	
			echo "da"
			printf "你还有%d天过生日\n" $[366-$cresult]
		else
			echo "da"
			printf "你还有%d天过生日\n"  $[365-$cresult]
		fi
	elif((todaythisyearsdays < birthdatthisyearsdays));
	then
		echo "xiao"
		let cresult=$[birthdatthisyearsdays]+0-$[todaythisyearsdays]
		printf "你还有%d天过生日\n" $cresult
	else
		echo "xiao"
		echo "生日快乐"
	fi
}
#下一行是测试行
getnextbirthday


运行结果如下:
shall的两个小练习_第2张图片
shall的两个小练习_第3张图片
shall的两个小练习_第4张图片

你可能感兴趣的:(shall的两个小练习)