案例介绍
利用shell脚本获取系统的信息和系统当前状态信息,如系统的名称版本,系统当前的负载,磁盘使用情况等。
该案例一共包括两个脚本文件:
1、monitor.sh (主控制脚本)
2、sys_monitor.sh(系统信息监控脚本文件)
3、test.sh (测试主控脚本,没什么实际用处)
准备
在linux上新建一个文件夹shell1,然后在里面新建三个.sh文件:monitor.sh、sys_monitor.sh
开始写代码
第一步:先写主控脚本:monitor.sh
cd shell1
vim monitor.sh
#monitor.sh
#!/bin/bash
i=0
#${tput sgr0}可以设置echo -e的结束颜色为系统默认颜色
reset=$(tput sgr0)
number=""
#声明关联数组,关联数组的索引可以是字符串
declare -A reArr
#取出shell1中的除了"monitor.sh"的每个文件,
for script_file in $(ls -I 'monitor.sh')
do
echo -e "\e[1;36m" ${i} ${script_file} "==>" ${reset}
#用关联数组reArr保存文件的索引和文件名
reArr[$i]=${script_file}
number="${number} | ${i}"
#索引自增
i=$(( i+1 ))
done
echo ${number}
while true
do
read -t 30 -p "please input number : " num
echo $num
#用户输入的不是0-1,退出
if [[ $num != [0-1] ]]
then
exit 1
fi
#用户输入的0-1,执行该脚本文件
sh ./${reArr[$num]}
done
第二步:写测试脚本:test.sh (此时仍然在shell1文件夹下)
vim test.sh
# test.sh
#!/bin/bash
echo "test!"
第四步:测试主控脚本
vim monitor.sh
test.sh索引为1,按提示输入数字1,打印出”test!”,说明主控脚本测试成功!
第五步:编写系统信息监控脚本
vim sys_monitor.sh
需要输出的系统信息有:
系统名称: uname -o
系统名字和版本: cat /etc/issue | grep "release"
系统体系结构: uanme -m
主机名:${HOSTNAME}
内部IP:hostname -I
外部IP: curl -s http://ipecho.net/plain
查询网络是否联通:ping -c 2 某个域名
测试是否能联通
登录服务器的用户: who
查询系统已使用内存,MemTotal-MemFree:
awk '/MemTotal/{memTotal=$2}/MemFree/{memFree=$2}END{print "system_used_memory:" (memTotal-memFree)/1024 "M"}' /proc/meminfo
查询系统上应用使用的内存:MemTotal-MemFree-Cache(缓存)-Buffers(缓冲):
awk '/MemTotal/{memTotal=$2}/MemFree/{memFree=$2}/^Cashed/{cashed=$2}/Buffers/{buffers=$2}END{print "apps_used_memory:" (memTotal-memFree-cashed-buffers)/1024 "M"}' /proc/meminfo
系统最近的平均负载:top -n 1 | sed -n '1p' | awk '{print "load average: "$12 $13 $14}'
磁盘使用情况:df -h | sed -n '2p' | awk '{print "disk_name:"$1 " size:"$2" used:"$5}'
系统监控脚本代码
#!/bin/bash
clear
reset=$(tput sgr0)
if [[ $# -eq 0 ]]
then
echo "os_name: $(uname -o)"
echo "os name and version:" $(cat /etc/issue | grep -e "release")
echo "architecture: $(uname -m)"
echo "hostname: ${HOSTNAME}"
echo -e "internal ip: \e[32m $(hostname -I)" ${reset}
echo -e "external ip:\e[32m $(curl -s http://ipecho.net/plain)" ${reset}
ping -c 2 "www.baidu.com" &> /dev/null && echo "Internet Connected" || echo "Internet Disconnected"
who > /tmp/who
echo -e "\e[32m Logged in Users:" $reset && cat /tmp/who
rm -f /tmp/who
awk '/MemTotal/{memTotal=$2}/MemFree/{memFree=$2}END{print "system_used_memory:" (memTotal-memFree)/1024 "M"}' /proc/meminfo
awk '/MemTotal/{memTotal=$2}/MemFree/{memFree=$2}/^Cashed/{cashed=$2}/Buffers/{buffers=$2}END{print "apps_used_memory:" (memTotal-memFree-cashed-buffers)/1024 "M"}' /proc/meminfo
top -n 1 | sed -n '1p' | awk '{print "load average: "$12 $13 $14}'
df -h | sed -n '2p' | awk '{print "disk_name:"$1 " size:"$2" used:"$5}'
fi
~
第六步:测试监控脚本
sh monitor.sh
按提示输入数字0: