Shell进阶脚本集合

文章目录

    • 一、Linux监控一个主机状态脚本
    • 二、Linux监控服务端口状态脚本
    • 三、Linux计算内存使用率占比
    • 四、Linux 磁盘I/O列长度监控脚本

一、Linux监控一个主机状态脚本

#!/bin/bash

for ((i=1;i<4;i++));do
    if ping -c1 $1 &>/dev/null;then
	export ping_count"$i"=1
    else
	export ping_count"$i"=0
    fi

# 时间间隔
    sleep 0.5
done

# 3次ping 失败报警
if [ $ping_count1 -eq $ping_count2 ] && [ $ping_count2 -eq $ping_count3 ] && [ $ping_count1 -eq 0 ]
    then
	echo "$1 is down"
    else
	echo "$1 is up"
fi


# 取消上面定义的变量
unset ping_count1
unset ping_count2
unset ping_count3

二、Linux监控服务端口状态脚本

#!/bin/bash
prot_status(){
temp_file=`mktemp prot_status.XXX`

# 1、判断telnet命令是否存在
[ ! -x /usr/bin/telnet ] && echo "telnet: not found comand" && exit 1
 

# 2、测试端口 $1:IP地址  $2:端口号
( telnet $1 $2 <<EOF
quit
EOF
 ) &> $temp_file

# 3、分析文件中内容 判断结果

if egrep "\^]" $temp_file &>/dev/null;then
    echo "$1 $2 open"
else
    echo "$1 $2 down"
fi

rm -f $temp_file
}
prot_status $1 $2

三、Linux计算内存使用率占比

#!/bin/bash

MEM_TOTAL=`free -h |awk 'NR==2{print $2}'`

MEM_USE=`free -h |awk 'NR==2{print $3}'`
MEM_USED=`free | grep -i mem |awk '{print $3/$2*100"%"}'`

MEM_FREE=`free -h |awk 'NR==2{print $4}'`
MEM_FREED=`free | grep -i mem |awk '{print $4/$2*100"%"}'`

MEM_BUFF_CACHE=`free -h |awk 'NR==2{print $6}'`
MEM_BUFF_CACHED=`free | grep -i mem |awk '{print $6/$2*100 "%"}'`

MEM_SHARE=`free -h |awk 'NR==2{print $5}'`
MEM_SHARED=`free | grep -i mem |awk '{print $5/$2*100 "%"}'`
MEM_ZONE=`head -3 /proc/meminfo | awk 'NR==1{t=$2}NR==2{f=$2;print(t-f)*100/t"%"}'`


echo "内存总量: $MEM_TOTAL"
echo "内存总量减剩余内存(所有已使用)占比: $MEM_ZONE"
echo "已使用: $MEM_USE  占比: $MEM_USED"
echo "剩  余: $MEM_FREE  占比: $MEM_FREED"
echo "共  享: $MEM_SHARE  占比: $MEM_SHARED" 
echo "缓冲区: $MEM_BUFF_CACHE  占比: $MEM_BUFF_CACHED"

四、Linux 磁盘I/O列长度监控脚本

建议先从了解 iostat命令开始: Linux iostat命令详解

[root@shell jao]# cat io.sh 
#!/bin/bash

# 判断系统是否安装iostat scipt 基于iostat命令
[ ! -x /usr/bin/iostat  ] && echo "iostat:command not found"&& exit 1 
io(){

#匹配以sd开头的磁盘 如磁盘是vd,或其他开头 这里直接改 Device_name变量即可。
Device_name=sd
Device_length=`iostat -d -x | egrep "^$Device_name[[:alpha:]]|^dm" |wc -l`

# tail -n +K 表示从第K个开始输出
iostat -x  1 3 | egrep "^sd[[:alpha:]]|^dm" |tail -n +$((Device_length+1)) | awk '{io_long[$1]+=$9}END{for (i in io_long)print io_long[i],i}'


echo "-----"
}

for ((i=1;i<6;i++));do
        io
done

你可能感兴趣的:(Shell,Shell脚本,BASH,Linux)