Shell实战之系统信息分析

前端之家收集整理的这篇文章主要介绍了Shell实战之系统信息分析前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

案例介绍

利用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:

猜你在找的Bash相关文章