#!/bin/bash 
#function是一个函数,可以省略不写,后面是函数名;
function cpu() {
#use变量名,vmstat命令是查看cpu信息的,NR代表的是行,$1,2..代表的是列;
#解释:判断NR是不是第三行,如果是打印第十三列和第十四列的值,以此类推;
use=$(vmstat |awk '{if (NR==3)print $13+$14}')
iowait=$(vmstat |awk '{if (NR==3)print $16}')
user=$(vmstat |awk '{if (NR==3)print $13}')
sys=$(vmstat |awk '{if (NR==3)print $14}')
echo "cpu - 使用率: ${user}% , 等待磁盘IO响应使用率: ${iowait}% "
}
function memory() {
#free -m命令是查看内存的,以M为单位;printf是格式化输出,光标定位在最后一个字符之后;
#解释:判断NR是不是第二行,如果是打印第二列的值,转换为G单位,保留一位小数;
total=$(free -m |awk '{if (NR==2) printf "%.1f",$2/1024}')
used=$(free -m |awk '{if (NR==2) printf "%.1f",($2-$NF)/1024}')
available=$(free -m |awk '{if (NR==2) printf "%.1f",$NF/1024}')
echo "内存 - 总大小: ${total}G , 已使用: ${used}G , 剩余: ${available}G "
}
disk (){
#df -h命令是查看磁盘的;
#解释:打印出第一列中以/dev/开头的值;^:以/dev/开头;\指转义符,屏蔽下一个字符的特殊意义;
dev=$(df -h |awk '/^\/dev/{print $1}')
for p in $dev; do
#解释:-v:变量赋值;$NF:最后一列
#解释:判断s是不是第一列以/dev/开头的其中的一个值,如果是打印最后一列的值;
mounted=$(df -h |awk -v s=$p 's==$1{print $NF}' )
size=$(df -h |awk -v s=$p 's==$1{print $2}')
used=$(df -h |awk -v s=$p 's==$1{print $3}')
used_percent=$(df -h |awk -v s=$p 's==$1{print $5}')
echo "硬盘 - 挂载点: $mounted , 总大小: $size , 已使用: $used , 使用率: $used_percent "
done
}
tcp_status(){
#解释:[$6]:数组为第六列的值,++:每遇见一次一样的值都加1;a:统计数组中不同类别的值对应的个数;
#解释:打印出第六列中不同类别的值以及值对应的个数;
status=$(netstat -anpt | awk '{a[$6]++}END{for (i in a) printf i ":" a[i]" "}')
echo "TCP连接状态 - $status "
}
cpu
memory
disk
tcp_status