注册 登录
  • 欢迎访问开心洋葱网站,在线教程,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站,欢迎加入开心洋葱 QQ群
  • 为方便开心洋葱网用户,开心洋葱官网已经开启复制功能!
  • 欢迎访问开心洋葱网站,手机也能访问哦~欢迎加入开心洋葱多维思维学习平台 QQ群
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏开心洋葱吧~~~~~~~~~~~~~!
  • 由于近期流量激增,小站的ECS没能经的起亲们的访问,本站依然没有盈利,如果各位看如果觉着文字不错,还请看官给小站打个赏~~~~~~~~~~~~~!

linux下格式化输出系统基本信息

Linux 水墨上仙 1622次浏览 已收录 手机上查看

linux下格式化输出系统基本信息,在centos6.2下测试通过

#!/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"
##--------程序结束-------


开心洋葱 , 版权所有丨如未注明 , 均为原创丨未经授权请勿修改 , 转载请注明linux下格式化输出系统基本信息
喜欢 (0)
[开心洋葱]
分享 (0)
关于作者:
水墨上仙
……
加载中……