ubl007
作者ubl007·2023-09-16 13:06
私有云高级交付(DTA方向)·百度智能云

一个获取主机硬件规格信息的shell脚本

字数 5137阅读 501评论 0赞 2

!/bin/bash

echo "################ README INFO #########################################"

echo "### Purpose: Get the infomation of Machine and Host ###"

echo "### Made By: PomanTeng ###"

echo "### E-mail: denggongmengbo@gmail.com ###"

echo "### WeChat: 1807479153 ###"

echo "### Version Identification Number:V2.1.0 ###"

echo "### Procedure Identification Number:20230916 ###"

echo "######################################################################"

Setting console color

C_RESET="$(tput sgr0)"

C_BLACK="\\033[1;30m"

C_RED="\\033[1;31m"

C_GREEN="\\033[1;32m"

C_YELLOW="\\033[1;33m"

C_BLUE="\\033[1;34m"

C_PURPLE="\\033[1;35m"

C_CYAN="\\033[1;36m"

C_WHITE="\\033[1;37m"

Setting color for symbol "#################################################"

printf "${C_PURPLE}"

cat << EOF

EOF

printf "${C_RESET}"

Check the current OS user

[[ $(id -u) -gt 0 ]] && echo "请用root用户执行此脚本!" && exit 1

Defining Variable "sysversion"

sysversion=$(rpm -q centos-release | cut -d- -f3)

Defining Variable "double_line"

double_line="==============================================================="

Defining Variable "line"

line="----------------------------------------------"

Print the message of the top page

printHeadInfo() {

cat << EOF


| 欢迎使用 【系统信息检查脚本】 |


EOF

}

Print the message of the bottom page

printFootInfo() {

cat << EOF


| 脚本执行结束,感谢使用!|


EOF

}

Defining the Variable "options" to get the name of the Menu

options=( "获取OS信息" "获取装机CPU信息" "获取装机内存信息" "获取装机硬盘信息" "退出" )

Defining functions such as "printMenu" etc.

Defining the Function "printMenu" to get the options to operate

printMenu() {

printf "${C_BLUE}"

printf "主菜单:\\n"

for i in "${!options[@]}"; do

index=expr ${i} + 1

val=expr ${index} % 2

printf "\\t(%02d) %-30s" "${index}" "${options[$i]}"

if [[ ${val} -eq 0 ]]; then

printf "\\n"

fi

done

printf "${C_BLUE}请输入需要执行的指令:\\n"

printf "${C_RESET}"

}

Defining the Function "get_OS_info" to get the information of the OS-Release

get_OS_info() {

os_release=$(cat /etc/*release)

Print the information of the OS-Release

cat << EOF

【操作系统发行版信息】

操作系统发行版:$os_release

EOF

}

Defining Function "get_cpu_info" to get information of onboard CPUs

get_cpu_info() {

Physical_CPU_mumbers=$(lscpu | grep "Socket(s)")

ecahPhysical_core_numbers=$(cat /proc/cpuinfo | grep "cpu cores" | uniq)

If sibings total equal to cpu cores , then the current CPU does not support Hyperthreading or Hyperthreading is closed now

siblings=$(cat /proc/cpuinfo | grep "siblings" | uniq)

instruction_CPU=$(gcc -march=native -Q --help=target | grep march)

CPU_Type=$(grep "model name" /proc/cpuinfo | awk -F ': ' '{print $2}' | sort | uniq)

CPU_Arch=$(lscpu | grep "Architecture")

total_logic_cpus=$(lscpu | grep "^CPU(s)")

per_core_Threads=$(lscpu | grep "Thread(s) per core")

virtual_type=$(lscpu | grep "Virtualization")

virt_technology=$(lscpu | grep "^Flags" | grep -E -o "vmx|svm")

compare=$(grep -e "cpu cores" -e "siblings" /proc/cpuinfo | sort | uniq)

Print the Information of CPU

每个物理CPU的逻辑个数:$Logic_CPU_numbers

cat << EOF

【CPU信息】

物理CPU个数:$Physical_CPU_mumbers

每CPU核心数:$ecahPhysical_core_numbers

每核心超线程数:$per_core_Threads

逻辑CPU总个数:$total_logic_cpus

CPU型号:$CPU_Type

CPU架构:$CPU_Arch

CPU支持的指令集:$instruction_CPU

CPU的虚拟化支持类型:$virtual_type

CPU采用的虚拟化技术:$virt_technology

siblings信息:$siblings

注意:当sibilings等于每物理CPU核心数时,则说明当前的CPU 不支持超线程技术或者超线程技术设定被关闭了;当sibilings等于每核心超线程数*每CPU核心数时,则说明当前的CPU开启了超线程技术

确认是否开启了超线程:

$compare

EOF

}

Defining the Function "Physical Memory" to get the Installed Capacity of Physical Memory

get_Ins_Mem() {

perSolt_Capacity=$(dmidecode -t memory | grep Size | sort | uniq)

signal_solt_value=$(dmidecode -t memory | grep Size | grep -v "No Module Installed" | uniq | awk -F " " '{print $2}')

ins_Solts=$(dmidecode -t memory | grep Size | grep -v "No Module Installed" | wc -l)

Ins_Mem=$[$signal_solt_value*$ins_Solts]

print the information of the Installed Capacity of Physical Memory

cat << EOF

【装机内存信息】

每个槽位的内存条容量:

$perSolt_Capacity

安装内存条的槽位数: $ins_Solts

装机内存总量: $Ins_Mem GB

EOF

}

Defining the Function "get_Disk_info" to get the Installed Capacity of Hard Disks

get_Disk_info() {

disk_info=$(fdisk -l | grep "Disk /dev" | cut -d, -f1)

disk_numbers=$(lsblk)

disk_use=$(df -hTP | awk '$2!="tmpfs"{print}')

disk_used_percent=$(free | sed -n '2p' | gawk 'x = int(( $3 / $2 ) * 100) {print x}' | sed 's/$/%/')

Print the information of disks

cat << EOF

【装机硬盘信息】

已经插入的硬盘:

${disk_numbers}

磁盘信息:

${disk_info}

磁盘使用情况:

${disk_use}

磁盘使用百分比: ${disk_used_percent}

EOF

}

Defining the Function "get_all_info" to write the log to the file machine_info.log

get_all_info() {

get_systatus_info

echo ${double_line}

get_cpu_info

echo ${double_line}

get_Ins_Mem

echo ${double_line}

get_Disk_info

echo ${double_line}

}

Defining the loop Function "main" to get the Custom Messages

main() {

while [[ 1 ]]

do

printMenu

read option

local index=$[ ${option} - 1 ]

case ${options[${index}]} in

"获取OS信息")

get_OS_info ;;

"获取装机CPU信息")

get_cpu_info ;;

"获取装机内存信息")

get_Ins_Mem ;;

"获取装机硬盘信息")

get_Disk_info ;;

"输出查询日志")

get_all_info > ./$(date +%Y-%m-%d-%H:%M:%S)-machine_info.log

printf "${C_GREEN}信息已经输出到 machine_info.log 中。${C_RESET}\\n\\n"

;;

"退出")

exit ;;

*)

clear

echo "抱歉,不支持此选项" ;;

esac

done

}

Execute Functions

printHeadInfo

main

printFootInfo

printf "${C_RESET}"

如果觉得我的文章对您有用,请点赞。您的支持将鼓励我继续创作!

2

添加新评论0 条评论

Ctrl+Enter 发表

作者其他文章

相关文章

相关问题

相关资料

X社区推广