Shell实战之系统信息分析

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

案例介绍

利用shell脚本获取系统的信息和系统当前状态信息,如系统的名称版本,系统当前的负载,磁盘使用情况等。

该案例一共包括两个脚本文件
1、monitor.sh (主控制脚本)
2、sys_monitor.sh(系统信息监控脚本文件)
3、test.sh (测试主控脚本,没什么实际用处)

准备

在linux上新建一个文件夹shell1,然后在里面新建三个.sh文件:monitor.sh、sys_monitor.sh

开始写代码

第一步:先写主控脚本:monitor.sh

  1. cd shell1
  2. vim monitor.sh
  1. #monitor.sh
  2. #!/bin/bash
  3. i=0
  4. #${tput sgr0}可以设置echo -e的结束颜色为系统默认颜色
  5. reset=$(tput sgr0)
  6. number=""
  7. #声明关联数组,关联数组的索引可以是字符串
  8. declare -A reArr
  9. #取出shell1中的除了"monitor.sh"的每个文件
  10. for script_file in $(ls -I 'monitor.sh')
  11. do
  12. echo -e "\e[1;36m" ${i} ${script_file} "==>" ${reset}
  13. #用关联数组reArr保存文件的索引和文件
  14. reArr[$i]=${script_file}
  15. number="${number} | ${i}"
  16. #索引自增
  17. i=$(( i+1 ))
  18. done
  19. echo ${number}
  20. while true
  21. do
  22. read -t 30 -p "please input number : " num
  23. echo $num
  24. #用户输入的不是0-1,退出
  25. if [[ $num != [0-1] ]]
  26. then
  27. exit 1
  28. fi
  29. #用户输入的0-1,执行该脚本文件
  30. sh ./${reArr[$num]}
  31. done

第二步:写测试脚本:test.sh (此时仍然在shell1文件夹下)

  1. vim test.sh
  1. # test.sh
  2. #!/bin/bash
  3. echo "test!"

第四步:测试主控脚本

  1. vim monitor.sh


test.sh索引为1,按提示输入数字1,打印出”test!”,说明主控脚本测试成功!

第五步:编写系统信息监控脚本

  1. 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:

  1. awk '/MemTotal/{memTotal=$2}/MemFree/{memFree=$2}END{print "system_used_memory:" (memTotal-memFree)/1024 "M"}' /proc/meminfo

查询系统上应用使用的内存:MemTotal-MemFree-Cache(缓存)-Buffers(缓冲):

  1. 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}'

系统监控脚本代码

  1. #!/bin/bash
  2. clear
  3. reset=$(tput sgr0)
  4. if [[ $# -eq 0 ]]
  5. then
  6. echo "os_name: $(uname -o)"
  7. echo "os name and version:" $(cat /etc/issue | grep -e "release")
  8. echo "architecture: $(uname -m)"
  9. echo "hostname: ${HOSTNAME}"
  10. echo -e "internal ip: \e[32m $(hostname -I)" ${reset}
  11. echo -e "external ip:\e[32m $(curl -s http://ipecho.net/plain)" ${reset}
  12. ping -c 2 "www.baidu.com" &> /dev/null && echo "Internet Connected" || echo "Internet Disconnected"
  13. who > /tmp/who
  14. echo -e "\e[32m Logged in Users:" $reset && cat /tmp/who
  15. rm -f /tmp/who
  16. awk '/MemTotal/{memTotal=$2}/MemFree/{memFree=$2}END{print "system_used_memory:" (memTotal-memFree)/1024 "M"}' /proc/meminfo
  17. 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
  18. top -n 1 | sed -n '1p' | awk '{print "load average: "$12 $13 $14}'
  19. df -h | sed -n '2p' | awk '{print "disk_name:"$1 " size:"$2" used:"$5}'
  20. fi
  21. ~

第六步:测试监控脚本

  1. sh monitor.sh

提示输入数字0:

猜你在找的Bash相关文章