#!/bin/bash -
#===============================================================================
#
# FILE: check_sys_info.sh
#
# DESCRIPTION:表格形式输出系统的基本信息,纯属蛋疼作,新手,有什么不足的地方请见谅
# 欢迎改进,有更好的方法,不吝赐教。
# BUGS: ---
# AUTHOR: 猪头饼 , liaodehai@126.com
# CREATED: 10/28/2012 11:10:19 AM CST
# VESION: 1.0
# REVISION: ---
#===============================================================================
set -o nounset # Treat unset variables as an error
#首先trap 1 2 3 15信号,重要
#trap 'kill -9 $BG_PID;echo;exit 2' 1 2 3 15
function trap_exit
{
tput cnorm
clear
kill -9 $BG_PID
}
trap 'trap_exit;exit 2' 1 2 3 15 #捕捉1 2 3 15 信号,执行命令
#---------------------------------------------
#检测判断基础值
#---------------------------------------------
SYS_NO=5.6 #定义版本号
BIT=32 #定义位数
DISK_SPEED_INIT=150 #基本速度
#---------------------------------------------
#TPUT命令定义
#---------------------------------------------
tput init #开启tput
BOLD=`tput bold` #粗体
B_LINK=`tput blink` #闪烁
REV=`tput rev` #逆转视图
NORMAL=`tput sgr0` #正常屏幕
CURSOR_OFF=`tput civis` #隐藏光标
CURSOR_ON=`tput cnorm` #开始光标
TPUT_RED=`echo -e "\e[40;31m"` #红色字体
P_COL=`tput cols` #获取屏幕行数
P_ROW=`tput lines` #获取屏幕列数
HOLD_C=`expr ${P_COL} / 2 ` #一半列数
HOLD_R=`expr ${P_ROW} / 2 + 15 ` #定位行数
#错误输出
OUT_PUT_ERROR="${BOLD}${TPUT_RED}${B_LINK}* ${NORMAL}${BOLD}${TPUT_RED}"
##定义结束
#---------------------------------------------
#函数开始
#---------------------------------------------
##进度条打印函数
bars ()
{
stty -echo >/dev/null 2>&1
i=0
b=''
while true
do
((i+=2))
echo -ne "\e[${HOLD_R};30H正在创建报表---"
# if [ $i -gt 100 ];then
# continue
# else
printf "进度:[%-50s]%d%%\r" $b $i
#fi
sleep 1.1
b=#$b
done
stty echo
echo
} # ---------- end of function BARS ----------
##高亮函数
colour ()
{
#背景色_前景色
case $1 in
black_red)
echo -e "\e[40;31m"
;;
black_green)
echo -e "\e[40;32m"
;;
black_yellow)
echo -e "\e[40;33m"
;;
esac # --- end of case ---
} # ---------- end of function colour ----------
##函数结束
#---------------------------------------------
# 主程序开始
#---------------------------------------------
${CURSOR_OFF}
clear
#首先使bars函数后台运行
bars &
BG_PID=$!
#-------- 主机信息 --------
##信息获取
##系统当前时区
TIME_ZONE=$(date -R | awk '{print $NF}')
##系统当前日期与时间
DATE=$(date +%F)
TIME=$(date +%T)
##服务器制造商
PRODUCT_NAME=$(dmidecode | grep "Product Name" |awk 'NR==1{print $NF}')
##主机名
MACHINE_NAME=$(uname -n)
##系统发行版本
SYS_RELEASE=$(cat /etc/issue|head -1)
SYS_DENFI_VER=$(echo ${SYS_RELEASE} | grep "${SYS_NO}") #过滤此版本
if [[ -z "${SYS_DENFI_VER}" ]];then
SYS_RELEASE="${OUT_PUT_ERROR}${SYS_RELEASE}${NORMAL}"
fi #如果版本不为定义版本则标红输出
##系统架构(位数)
SYS_FRAMEWORK=$(file /sbin/init | awk '{print $3}')
if [[ ${SYS_FRAMEWORK%%-*} -ne ${BIT} ]];then
SYS_FRAMEWORK="${OUT_PUT_ERROR}${SYS_FRAMEWORK}${NORMAL}"
fi
##系统内核版本
SYS_CORES_VER=$(uname -r)
##CPU类型
CPU_TYPE=$(cat /proc/cpuinfo|grep "name" | cut -d: -f2 |uniq -c| column -t)
##CPU主频
CPU_CLOCK_SPEED=$(cat /proc/cpuinfo|grep "MHz"|uniq|awk -F: '{print $2"MHZ"}'|column -t)
##CPU物理个数
PHYSICS_CPU=$(cat /proc/cpuinfo|grep "physical id"|sort|uniq|wc -l)
##单棵CPU核心数
#ONE_CPU_CORE=$(cat /proc/cpuinfo|grep "cores"|uniq|awk -F: '{print $2}'|column -t)
##单棵核心中CPU线程数
CPU_NT_THREAD=$(cat /proc/cpuinfo | grep physical |sort | uniq -c | awk 'NR==1{print $1}'|column -t)
##CPU总核心数(物理个数*单棵CPU的线程数)
VIRTUAL_CPU=$(cat /proc/cpuinfo|grep "name" | cut -d: -f2 |uniq -c | awk '{print $1}')
##内存大小
MEM_SIZE=$(free -m|grep -i "mem"|awk '{print $2"MB"}')
##swap大小
SW_SIZE=$(free -m | grep -i "swap" | awk '{print $2"MB"}')
##硬盘状态
DISK_STATUS=$(smartctl -H `df -h | grep boot | grep -v grep | awk '{print $1}' ` | grep Status | awk -F'[ :]' '{print $NF}')
if [[ "${DISK_STATUS}" != "OK" ]];then
DISK_STATUS="Error Or Empty"
DISK_STATUS="${OUT_PUT_ERROR}${DISK_STATUS}${NORMAL}"
fi
##硬盘大小
DISK_SIZE=$(fdisk -l |grep :|awk '/\/dev\/sd[a-z]/{print $2,$3"G"}')
##硬盘分区
DISK_PARTITION=$(df -lh | grep -v tmpfs |awk '{print $1,"\t",$2,"\t",$6}'| column -t)
##硬盘读写速度
TEST_COUNT=1 #开始数值
TEST_TIMES=3 #检测次数
while [[ "$TEST_COUNT" -le "$TEST_TIMES" ]]; do
###dd写测速
DD_W_TEST[$TEST_COUNT]=$(dd if=/dev/zero bs=1024 count=1000000 of=/tmp/1Gb.file 2>&1 |awk -F'[, ]+' '/sec/{print $8}')
if [[ "${DD_W_TEST[$TEST_COUNT]}" -lt "${DISK_SPEED_INIT}" ]];then
DD_W_TEST[$TEST_COUNT]="${OUT_PUT_ERROR}${DD_W_TEST[$TEST_COUNT]}${NORMAL}"
fi
###dd读测速 (默认130Mb/s)
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}')
if [[ "${DD_R_TEST[$TEST_COUNT]}" -lt "130" ]] ;then
DD_R_TEST[$TEST_COUNT]="${OUT_PUT_ERROR}${DD_R_TEST[$TEST_COUNT]}${NORMAL}"
fi
###hdparm读测速
HD_TEST[$TEST_COUNT]=$(hdparm -t `df -h | grep boot | grep -v grep | awk '{print $1}'` | awk -F'[ =]+' '{print $11}'| column -t)
if [[ "${HD_TEST[$TEST_COUNT]%%.*}" -lt "${DISK_SPEED_INIT}" ]] ;then
HD_TEST[$TEST_COUNT]="${OUT_PUT_ERROR}${HD_TEST[$TEST_COUNT]}${NORMAL}"
fi
((TEST_COUNT++))
done
#iptable状态
if (service iptables status |grep INPUT 2>&1 1>/dev/null) ; then
FIREWALL_STATUS="iptables 已经开启"
else
FIREWALL_STATUS="iptables 没有开启"
fi
##SeLINUX状态
SE_STATUS=$(cat /etc/selinux/config | grep "SELINUX=" | grep -v "^#" | cut -d= -f2)
##系统包安装情况
ADMIN_PACKAGE=$(rpm -qa |grep system |wc -l | awk '{print"系统工具包:"$0 }')
BASE_PACKAGE=$(rpm -qa |grep base |wc -l |awk '{print"基础包:"$0 }')
#-------- 网络信息 --------
##网卡个数
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)
##所有网卡资讯
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}'))
N_COUNT=0 #开始数值
while [[ $N_COUNT -lt $N_CARD_NUMBER ]]; do
##网卡IP地址
N_CARD_IPADDR[$N_COUNT]=$(ifconfig ${N_CARD[$N_COUNT]} | awk -F'[ :]+' 'NR==2{print $4}')
##网卡速率
N_CARD_SPEED[$N_COUNT]=$(ethtool ${N_CARD[$N_COUNT]} | awk '/[Ss]peed/{print $2}' | grep -v "Unknown")
N_CARD_SPEED[$N_COUNT]=${N_CARD_SPEED[$N_COUNT]:-0Mb/s}
if [ "${N_CARD_SPEED[$N_COUNT]%%M*}" -ne 1000 ];then
N_CARD_SPEED[$N_COUNT]="${OUT_PUT_ERROR}${N_CARD_SPEED[$N_COUNT]}${NORMAL}"
fi
((N_COUNT++))
done
##网卡驱动类型
N_CARD_DRIVE=$(ethtool -i ${N_CARD[0]} |awk -F: 'NR==1{print $NF}'| column -t )
##网卡驱动版本
N_CARD_VER=$(ethtool -i ${N_CARD[0]} |awk -F: 'NR==2{print $NF}'|column -t)
##网卡驱动固件版本
N_CARD_FIR_VER=$(ethtool -i ${N_CARD[0]} |awk -F: 'NR==3{print $NF}'|column -t)
##结束打印进程
kill -9 $BG_PID
${CURSOR_ON}
#-------- 显示菜单 --------
#菜单坐标函数定义
xy()
{
_R=$1 #行
_C=$2 #列
_TEXT=$3
tput cup $_R $_C
echo -n $_TEXT
} #XY光标显示位置
center()
{
_STR=$2 #字符串
_ROW=$3
LEN=`echo $_STR | wc -l`
COLS=`tput cols` #列数目
HOLD_COL=`expr $COLS - $LEN`
case $1 in
all)
NEW_COL=`expr $HOLD_COL / 2 ` #中心位置显示文本=列数-字符串长度/2
;;
half)
NEW_COL=`expr $HOLD_COL / 4 ` #开始一半的2/1位置显示
;;
eighth)
NEW_COL=`expr $HOLD_COL / 8 ` #一半的一半
;;
esac
tput cup $_ROW $NEW_COL
echo -n $_STR
}
#函数结束
#开始制表
tput clear
colour black_green
center "half" "${BOLD}<<系统基本信息表>>${NORMAL}" 1
xy 2 1 "日期:$DATE"
xy 2 20 "时间:${TIME}"
#第一条横线
xy 3 1 "-"
#横向打印
for ((i=2;i<${HOLD_C};i++));do
printf "%s" -
done
#向下打印
xy 4 0 "|"
for ((i=4;i<=${HOLD_R};i++));do
printf "|"
printf "\n"
done
#中沿线
for ((i=4;i<${HOLD_R};i++));do
center "all" "|" $i
#eighth_center "|" $i
center "eighth" "|" $i
done
colour black_yellow
xy 5 2 "${BOLD}信息名称"
center "half" "${BOLD}参考值${NORMAL}" 5
#第二条横线
xy 7 1 "-"
#横向打印
for ((i=2;i<${HOLD_C};i++));do
printf "%s" -
done
#输出关键字
OUTPUT_NAME="服务器制造商
主机名
系统发行版本
系统架构
系统内核版本
CPU类型
CPU主频
CPU物理个数
单棵核心中线程数
CPU总核心数
内存大小
swap大小
硬盘状态
硬盘大小
iptable状态
SeLINUX状态
系统包安装情况
DD写速度(参考:${DISK_SPEED_INIT})
DD读速度(参考:130)
hdparm读(参考:${DISK_SPEED_INIT})
网卡个数
所有网卡名称
网卡ip地址
网卡速率
网卡驱动类型
网卡驱动版本
网卡驱动固件版本
硬盘分区"
#值变量
OUTPUT_VAR="${PRODUCT_NAME}
${MACHINE_NAME}
${SYS_RELEASE}
${SYS_FRAMEWORK}
${SYS_CORES_VER}
${CPU_TYPE}
${CPU_CLOCK_SPEED}
${PHYSICS_CPU}
${CPU_NT_THREAD}
${VIRTUAL_CPU}
${MEM_SIZE}
${SW_SIZE}
${DISK_STATUS}
${DISK_SIZE}
${FIREWALL_STATUS}
${SE_STATUS}
${ADMIN_PACKAGE}|${BASE_PACKAGE}
第一次:${DD_W_TEST[1]} |第二次:${DD_W_TEST[2]} |第三次:${DD_W_TEST[3]} (单位:MB/s)
第一次:${DD_R_TEST[1]} |第二次:${DD_R_TEST[2]} |第三次:${DD_R_TEST[3]} (单位:MB/s)
第一次:${HD_TEST[1]} |第二次:${HD_TEST[2]} |第三次:${HD_TEST[3]} (单位:MB/s)
${N_CARD_NUMBER}
${N_CARD[*]}
${N_CARD_IPADDR[*]}
${N_CARD_SPEED[*]}
${N_CARD_DRIVE}
${N_CARD_VER}
${N_CARD_FIR_VER}
${DISK_PARTITION}"
#关键字输出
_x=8
for S_NAME in ${OUTPUT_NAME};do
_y=1
xy $_x $_y "${S_NAME}:"
((_x++))
done
#更改IFS输出值
OLD_IFS=$IFS
IFS=$'\x0A'
#值输出
_xx=8
for S_VAR in ${OUTPUT_VAR};do
_yy=22
xy $_xx $_yy "${S_VAR}"
((_xx++))
done
IFS=$OLD_IFS
#尾部横线
xy ${HOLD_R} 1 "-"
#横向打印
for ((i=2;i<${HOLD_C};i++));do
printf "%s" -
done
printf "\n\n"
##--------程序结束-------
2016-11-16
检测系统信息sys_check_info
评论
发表评论
姓 名: