Format basic information of output system under Linux

From , 5 Years ago, written in PowerShell, viewed 71 times.
URL https://pastebin.vip/view/35a12c43
  1. #!/bin/bash -
  2. #===============================================================================
  3. #
  4. #          FILE: check_sys_info.sh
  5. #
  6. #   DESCRIPTION:表格形式输出系统的基本信息,纯属蛋疼作,新手,有什么不足的地方请见谅
  7. # 欢迎改进,有更好的方法,不吝赐教。
  8. #          BUGS: ---
  9. #        AUTHOR: 猪头饼 , liaodehai@126.com
  10. #       CREATED: 10/28/2012 11:10:19 AM CST
  11. #                VESION: 1.0
  12. #      REVISION: ---
  13. #===============================================================================
  14.  
  15. set -o nounset                              # Treat unset variables as an error
  16. #首先trap 1 2 3 15信号,重要
  17. #trap 'kill -9 $BG_PID;echo;exit 2' 1 2 3 15
  18. function trap_exit
  19. {
  20.         tput cnorm
  21.         clear
  22.         kill -9 $BG_PID
  23. }
  24. trap 'trap_exit;exit 2' 1 2 3 15 #捕捉1 2 3 15 信号,执行命令
  25.  
  26. #---------------------------------------------
  27. #检测判断基础值
  28. #---------------------------------------------
  29. SYS_NO=5.6              #定义版本号
  30. BIT=32          #定义位数
  31. DISK_SPEED_INIT=150 #基本速度
  32.  
  33.  
  34.  
  35. #---------------------------------------------
  36. #TPUT命令定义
  37. #---------------------------------------------
  38. tput init                                                       #开启tput
  39. BOLD=`tput bold`                                                #粗体
  40. B_LINK=`tput blink`                                     #闪烁
  41. REV=`tput rev`                                          #逆转视图
  42. NORMAL=`tput sgr0`                                      #正常屏幕
  43. CURSOR_OFF=`tput civis`                         #隐藏光标
  44. CURSOR_ON=`tput cnorm`                          #开始光标
  45. TPUT_RED=`echo -e "\e[40;31m"`          #红色字体
  46. P_COL=`tput cols`                               #获取屏幕行数
  47. P_ROW=`tput lines`                              #获取屏幕列数
  48. HOLD_C=`expr ${P_COL} / 2 `             #一半列数
  49. HOLD_R=`expr ${P_ROW} / 2 + 15 `        #定位行数
  50. #错误输出
  51. OUT_PUT_ERROR="${BOLD}${TPUT_RED}${B_LINK}* ${NORMAL}${BOLD}${TPUT_RED}"
  52. ##定义结束
  53.  
  54.  
  55. #---------------------------------------------
  56. #函数开始
  57. #---------------------------------------------
  58. ##进度条打印函数
  59. bars ()
  60. {
  61.         stty -echo >/dev/null 2>&1
  62.         i=0
  63.         b=''
  64.         while true
  65.         do
  66.                 ((i+=2))
  67.                 echo -ne "\e[${HOLD_R};30H正在创建报表---"
  68.                 #       if [ $i -gt 100 ];then
  69.                 #               continue
  70.                 #       else
  71.                 printf "进度:[%-50s]%d%%\r" $b $i
  72.                 #fi
  73.                 sleep 1.1
  74.                 b=#$b
  75.         done
  76.         stty echo
  77.         echo
  78. }       # ----------  end of function BARS  ----------
  79.  
  80. ##高亮函数
  81. colour ()
  82. {
  83.         #背景色_前景色
  84.         case $1 in
  85.                 black_red)
  86.                 echo -e "\e[40;31m"
  87.                 ;;
  88.  
  89.                 black_green)
  90.                 echo -e "\e[40;32m"
  91.                 ;;
  92.  
  93.                 black_yellow)
  94.                 echo -e "\e[40;33m"
  95.                 ;;
  96.  
  97.         esac    # --- end of case ---
  98.  
  99. }       # ----------  end of function colour  ----------
  100. ##函数结束
  101.  
  102.  
  103. #---------------------------------------------
  104. # 主程序开始
  105. #---------------------------------------------
  106. ${CURSOR_OFF}
  107. clear
  108. #首先使bars函数后台运行
  109. bars &
  110. BG_PID=$!
  111.  
  112.  
  113. #-------- 主机信息 --------
  114.  
  115. ##信息获取
  116. ##系统当前时区
  117. TIME_ZONE=$(date -R | awk '{print $NF}')
  118.  
  119. ##系统当前日期与时间
  120. DATE=$(date +%F)
  121. TIME=$(date +%T)
  122.  
  123. ##服务器制造商
  124. PRODUCT_NAME=$(dmidecode | grep "Product Name" |awk 'NR==1{print $NF}')
  125.  
  126. ##主机名
  127. MACHINE_NAME=$(uname -n)
  128.  
  129. ##系统发行版本
  130. SYS_RELEASE=$(cat /etc/issue|head -1)
  131. SYS_DENFI_VER=$(echo ${SYS_RELEASE} | grep "${SYS_NO}")         #过滤此版本
  132. if [[ -z "${SYS_DENFI_VER}" ]];then
  133.         SYS_RELEASE="${OUT_PUT_ERROR}${SYS_RELEASE}${NORMAL}"
  134. fi              #如果版本不为定义版本则标红输出
  135.  
  136. ##系统架构(位数)
  137. SYS_FRAMEWORK=$(file /sbin/init | awk '{print $3}')
  138. if [[ ${SYS_FRAMEWORK%%-*} -ne ${BIT} ]];then
  139.         SYS_FRAMEWORK="${OUT_PUT_ERROR}${SYS_FRAMEWORK}${NORMAL}"
  140. fi
  141.  
  142. ##系统内核版本
  143. SYS_CORES_VER=$(uname -r)
  144.  
  145. ##CPU类型
  146. CPU_TYPE=$(cat /proc/cpuinfo|grep "name" | cut -d: -f2 |uniq -c| column -t)
  147.  
  148. ##CPU主频
  149. CPU_CLOCK_SPEED=$(cat /proc/cpuinfo|grep "MHz"|uniq|awk -F: '{print $2"MHZ"}'|column -t)
  150.  
  151. ##CPU物理个数
  152. PHYSICS_CPU=$(cat /proc/cpuinfo|grep "physical id"|sort|uniq|wc -l)
  153.  
  154. ##单棵CPU核心数
  155. #ONE_CPU_CORE=$(cat /proc/cpuinfo|grep "cores"|uniq|awk -F: '{print $2}'|column -t)
  156.  
  157. ##单棵核心中CPU线程数
  158. CPU_NT_THREAD=$(cat /proc/cpuinfo | grep physical |sort | uniq -c | awk 'NR==1{print $1}'|column -t)
  159.  
  160. ##CPU总核心数(物理个数*单棵CPU的线程数)
  161. VIRTUAL_CPU=$(cat /proc/cpuinfo|grep "name" | cut -d: -f2 |uniq -c | awk '{print $1}')
  162.  
  163.  
  164. ##内存大小
  165. MEM_SIZE=$(free -m|grep -i "mem"|awk '{print $2"MB"}')
  166.  
  167. ##swap大小
  168. SW_SIZE=$(free -m | grep -i "swap" | awk '{print $2"MB"}')
  169.  
  170. ##硬盘状态
  171. DISK_STATUS=$(smartctl  -H `df -h | grep boot | grep -v grep | awk '{print $1}' `  | grep Status | awk -F'[ :]' '{print $NF}')
  172. if [[ "${DISK_STATUS}" != "OK" ]];then
  173.         DISK_STATUS="Error Or Empty"
  174.         DISK_STATUS="${OUT_PUT_ERROR}${DISK_STATUS}${NORMAL}"
  175. fi
  176.  
  177. ##硬盘大小
  178. DISK_SIZE=$(fdisk -l |grep :|awk '/\/dev\/sd[a-z]/{print $2,$3"G"}')
  179.  
  180. ##硬盘分区
  181. DISK_PARTITION=$(df -lh | grep -v tmpfs |awk '{print $1,"\t",$2,"\t",$6}'| column -t)
  182.  
  183. ##硬盘读写速度
  184. TEST_COUNT=1 #开始数值
  185. TEST_TIMES=3 #检测次数
  186. while [[ "$TEST_COUNT" -le "$TEST_TIMES" ]]; do
  187.         ###dd写测速
  188.         DD_W_TEST[$TEST_COUNT]=$(dd if=/dev/zero bs=1024 count=1000000 of=/tmp/1Gb.file  2>&1 |awk -F'[, ]+' '/sec/{print $8}')
  189.         if [[ "${DD_W_TEST[$TEST_COUNT]}" -lt "${DISK_SPEED_INIT}" ]];then
  190.                 DD_W_TEST[$TEST_COUNT]="${OUT_PUT_ERROR}${DD_W_TEST[$TEST_COUNT]}${NORMAL}"
  191.         fi
  192.         ###dd读测速 (默认130Mb/s)
  193.         DD_R_TEST[$TEST_COUNT]=$(dd if=/tmp/1Gb.file bs=64k 2>&1 |dd of=/dev/null 2>&1 |awk -F'[, ]+' '/sec/{print $8}')
  194.         if [[ "${DD_R_TEST[$TEST_COUNT]}" -lt "130" ]] ;then
  195.                 DD_R_TEST[$TEST_COUNT]="${OUT_PUT_ERROR}${DD_R_TEST[$TEST_COUNT]}${NORMAL}"
  196.         fi
  197.         ###hdparm读测速
  198.         HD_TEST[$TEST_COUNT]=$(hdparm -t `df -h | grep boot | grep -v grep | awk '{print $1}'` | awk -F'[ =]+' '{print $11}'| column -t)
  199.         if [[ "${HD_TEST[$TEST_COUNT]%%.*}" -lt "${DISK_SPEED_INIT}" ]] ;then
  200.                 HD_TEST[$TEST_COUNT]="${OUT_PUT_ERROR}${HD_TEST[$TEST_COUNT]}${NORMAL}"
  201.         fi
  202.         ((TEST_COUNT++))
  203. done
  204.  
  205. #iptable状态
  206. if (service iptables status |grep INPUT 2>&1 1>/dev/null) ; then
  207.         FIREWALL_STATUS="iptables 已经开启"
  208. else
  209.         FIREWALL_STATUS="iptables 没有开启"
  210. fi
  211.  
  212. ##SeLINUX状态
  213. SE_STATUS=$(cat /etc/selinux/config | grep "SELINUX=" | grep -v "^#" | cut -d= -f2)
  214.  
  215. ##系统包安装情况
  216. ADMIN_PACKAGE=$(rpm -qa |grep system |wc -l | awk '{print"系统工具包:"$0 }')
  217. BASE_PACKAGE=$(rpm -qa |grep base |wc -l |awk '{print"基础包:"$0 }')
  218.  
  219.  
  220. #-------- 网络信息 --------
  221.  
  222. ##网卡个数
  223. N_CARD_NUMBER=$(ifconfig | egrep "^eth[0-1]|^em[0-1]" | egrep -v "^eth[0-1]:[0-1]|^em[0-1]:[0-1]"  |awk '{print $1}'|wc -l)
  224.  
  225. ##所有网卡资讯
  226. N_CARD=($(ifconfig | egrep "^eth[0-1]|^em[0-1]" | egrep -v "^eth[0-1]:[0-1]|^em[0-1]:[0-1]"  |awk '{print $1}'))
  227.  
  228. N_COUNT=0 #开始数值
  229. while [[ $N_COUNT -lt $N_CARD_NUMBER ]]; do
  230.         ##网卡IP地址
  231.         N_CARD_IPADDR[$N_COUNT]=$(ifconfig ${N_CARD[$N_COUNT]} | awk -F'[ :]+' 'NR==2{print $4}')
  232.         ##网卡速率
  233.         N_CARD_SPEED[$N_COUNT]=$(ethtool ${N_CARD[$N_COUNT]} | awk '/[Ss]peed/{print $2}' |  grep -v "Unknown")
  234.         N_CARD_SPEED[$N_COUNT]=${N_CARD_SPEED[$N_COUNT]:-0Mb/s}
  235.         if [ "${N_CARD_SPEED[$N_COUNT]%%M*}" -ne 1000 ];then
  236.                 N_CARD_SPEED[$N_COUNT]="${OUT_PUT_ERROR}${N_CARD_SPEED[$N_COUNT]}${NORMAL}"
  237.         fi
  238.         ((N_COUNT++))
  239. done
  240.  
  241. ##网卡驱动类型
  242. N_CARD_DRIVE=$(ethtool -i ${N_CARD[0]} |awk -F: 'NR==1{print $NF}'| column -t )
  243.  
  244. ##网卡驱动版本
  245. N_CARD_VER=$(ethtool -i ${N_CARD[0]} |awk -F: 'NR==2{print $NF}'|column -t)
  246.  
  247. ##网卡驱动固件版本
  248. N_CARD_FIR_VER=$(ethtool -i ${N_CARD[0]} |awk -F: 'NR==3{print $NF}'|column -t)
  249.  
  250. ##结束打印进程
  251. kill -9 $BG_PID
  252. ${CURSOR_ON}
  253.  
  254.  
  255. #-------- 显示菜单 --------
  256. #菜单坐标函数定义
  257. xy()
  258. {
  259.         _R=$1 #行
  260.         _C=$2 #列
  261.         _TEXT=$3
  262.         tput cup $_R $_C
  263.         echo -n $_TEXT
  264. }   #XY光标显示位置
  265.  
  266. center()
  267. {  
  268.         _STR=$2 #字符串
  269.         _ROW=$3
  270.         LEN=`echo $_STR | wc -l`
  271.         COLS=`tput cols` #列数目
  272.         HOLD_COL=`expr $COLS - $LEN`
  273.         case $1 in
  274.                 all)
  275.                 NEW_COL=`expr $HOLD_COL / 2 `   #中心位置显示文本=列数-字符串长度/2
  276.                 ;;
  277.  
  278.                 half)
  279.                 NEW_COL=`expr $HOLD_COL / 4 `   #开始一半的2/1位置显示
  280.                 ;;
  281.  
  282.                 eighth)
  283.                 NEW_COL=`expr $HOLD_COL / 8 `   #一半的一半
  284.                 ;;
  285.  
  286.         esac  
  287.         tput cup $_ROW $NEW_COL
  288.         echo -n $_STR
  289. }
  290. #函数结束
  291.  
  292.  
  293.  
  294. #开始制表
  295. tput clear
  296. colour black_green
  297. center "half" "${BOLD}<<系统基本信息表>>${NORMAL}" 1
  298. xy 2 1 "日期:$DATE"
  299. xy 2 20 "时间:${TIME}"
  300. #第一条横线
  301. xy 3 1 "-"
  302. #横向打印
  303. for ((i=2;i<${HOLD_C};i++));do
  304.         printf "%s" -
  305. done
  306.  
  307. #向下打印
  308. xy 4 0 "|"
  309. for ((i=4;i<=${HOLD_R};i++));do
  310.         printf "|"
  311.         printf "\n"
  312. done
  313.  
  314. #中沿线
  315. for ((i=4;i<${HOLD_R};i++));do
  316.         center "all" "|" $i
  317.         #eighth_center "|" $i
  318.         center "eighth" "|" $i
  319. done
  320.  
  321. colour black_yellow
  322. xy 5 2 "${BOLD}信息名称"
  323. center "half" "${BOLD}参考值${NORMAL}" 5
  324.  
  325. #第二条横线
  326. xy 7 1 "-"
  327. #横向打印
  328. for ((i=2;i<${HOLD_C};i++));do
  329.         printf "%s" -
  330. done
  331.  
  332.  
  333. #输出关键字
  334. OUTPUT_NAME="服务器制造商
  335. 主机名
  336. 系统发行版本
  337. 系统架构
  338. 系统内核版本
  339. CPU类型
  340. CPU主频
  341. CPU物理个数
  342. 单棵核心中线程数
  343. CPU总核心数
  344. 内存大小
  345. swap大小
  346. 硬盘状态
  347. 硬盘大小
  348. iptable状态
  349. SeLINUX状态
  350. 系统包安装情况
  351. DD写速度(参考:${DISK_SPEED_INIT})
  352. DD读速度(参考:130)
  353. hdparm读(参考:${DISK_SPEED_INIT})
  354. 网卡个数
  355. 所有网卡名称
  356. 网卡ip地址
  357. 网卡速率
  358. 网卡驱动类型
  359. 网卡驱动版本
  360. 网卡驱动固件版本
  361. 硬盘分区"
  362.  
  363. #值变量
  364. OUTPUT_VAR="${PRODUCT_NAME}
  365. ${MACHINE_NAME}
  366. ${SYS_RELEASE}
  367. ${SYS_FRAMEWORK}
  368. ${SYS_CORES_VER}
  369. ${CPU_TYPE}
  370. ${CPU_CLOCK_SPEED}
  371. ${PHYSICS_CPU}
  372. ${CPU_NT_THREAD}
  373. ${VIRTUAL_CPU}
  374. ${MEM_SIZE}
  375. ${SW_SIZE}
  376. ${DISK_STATUS}
  377. ${DISK_SIZE}
  378. ${FIREWALL_STATUS}
  379. ${SE_STATUS}
  380. ${ADMIN_PACKAGE}|${BASE_PACKAGE}
  381. 第一次:${DD_W_TEST[1]} |第二次:${DD_W_TEST[2]} |第三次:${DD_W_TEST[3]} (单位:MB/s)
  382. 第一次:${DD_R_TEST[1]} |第二次:${DD_R_TEST[2]} |第三次:${DD_R_TEST[3]} (单位:MB/s)
  383. 第一次:${HD_TEST[1]} |第二次:${HD_TEST[2]} |第三次:${HD_TEST[3]} (单位:MB/s)
  384. ${N_CARD_NUMBER}
  385. ${N_CARD[*]}
  386. ${N_CARD_IPADDR[*]}
  387. ${N_CARD_SPEED[*]}
  388. ${N_CARD_DRIVE}
  389. ${N_CARD_VER}
  390. ${N_CARD_FIR_VER}
  391. ${DISK_PARTITION}"
  392.  
  393. #关键字输出
  394. _x=8
  395. for S_NAME in ${OUTPUT_NAME};do
  396.         _y=1
  397.         xy $_x $_y "${S_NAME}:"
  398.         ((_x++))
  399. done
  400.  
  401. #更改IFS输出值
  402. OLD_IFS=$IFS
  403. IFS=$'\x0A'
  404.  
  405. #值输出
  406. _xx=8
  407. for S_VAR in ${OUTPUT_VAR};do
  408.         _yy=22
  409.         xy $_xx $_yy "${S_VAR}"
  410.         ((_xx++))
  411. done
  412. IFS=$OLD_IFS
  413.  
  414. #尾部横线
  415. xy ${HOLD_R} 1 "-"
  416. #横向打印
  417. for ((i=2;i<${HOLD_C};i++));do
  418.         printf "%s" -
  419. done
  420. printf "\n\n"
  421.  
  422.  
  423. ##--------程序结束-------
  424.  
  425. //shell/5571

Reply to "Format basic information of output system under Linux"

Here you can reply to the paste above

captcha

https://burned.cc - Burn After Reading Website