shell自主查询linux硬件信息与服务器部分服务启动情况小脚本

本文介绍了一个实用的Shell脚本,用户可通过输入字符选项查询虚拟机的硬件信息和服务启动状态。脚本支持系统信息、CPU信息、内存信息、硬盘及分区信息、服务检测等功能,并将结果显示在屏幕上同时记录到日志文件中。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

脚本介绍:

  脚本功能:用户通过输入系统信息具体对应的字符的选择项来查看该虚拟机对应的硬件信息与服务器的部分服务启动情况。

  本脚实现的功能主要是根据操作者输入对应的字符选项来显示选项相应的内容,既显示在窗口也在对应的文件夹下生成带有具体时间的log(具体时间到秒,防止覆盖),方便后续的查询。

具体操作:

1、启动脚本后,给用户一个选择,是继续还是退出程序。

 

2.1当用户选择2时,即退出脚本。(防止用户误操作)

 

2.2当用户选择1时,即进入选择,选择想要显示虚拟机相应的信息(在输入信息的上一行,显示了缩写字符对应的具体信息,用户可参考这个信息并根据需求做出相应的选择。).

 

一、脚本功能演示

实例一、查看系统信息

(1) 、当用户输入system的对应字符“s”即查询系统信息,会立即在窗口显示查询的结果,并将结果生成对应的log文件,方便后续的查询。当信息显示完选择项相对应的数据内容后,又返回到最初的用户交互界面,是继续进行查询还是退出程序。

 

(2) 在指定的文件位置生成指定类型的log文件。

 

 

指定文件格式为:指定位置/文件类型_info_log_时间(具体到秒,防止再次执行后覆盖).log

 

刚刚执行程序查看系统信息后生成的log文件

 

查看生成的log内容,与查询时窗口显示的信息内容一直(可自行与前面的进行比较).

 

示例二:查询linux服务器的服务(WWW, SSH, FTP and Mail)是否启动。

(1)、启动result_new.sh脚本进入交互选择进入信息的界面,输入d来查询服务是否启动

 

(2)在指定位置查看生成的log


二、脚本功能实现的关键代码

1、解释说明代码实现的功能,方便后期查看、维护与扩展。

 

2、主要环境变量的宣告

 

3、声明元素变量与创建时间变量

 


4、使用函数,用对应功能的名称来命名。

1)、查看系统信息的函数

 

2) 、查看CPU信息的函数

 

3) 、内存信息查看

 

4) 、查看硬盘信息与分区信息

 

5) 、查看服务器的部分服务启动情况

6) 、通过启动start_script这个函数来实现通过用户输入功能的代表字符来调用对应的函数。


7) 、询问用户是否程序是否进入下一步,1”代表继续执行程序,“2”代表退出程序。使用while判断,使while的执行条件一直为true,当用户查询一个信息之后,用户有可能会再次查询其他信息,故不能程序自动结束退出。当用户查询完成后,可以自己选择输入“2”来进行程序的退出。

 

 注释:此是在linux下的运行结果,Mac上的文件配置与linux的配置不一样。如果要用在Mac上需要进行修改。

下面为整个完整的shell脚本代码:

#!/bin/bash

#File : result.sh

#Version:

#Copyright:2018_4

#Description:

#Author:rabbit

#Change History:

 

PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin

export PATH

 

#All information about linux information go into the "/root/shell/linux/..." folder

#so if it doesn't exit, creat it.

S_DIR=/root/shell/linux/linux_log/system_info

C_DIR=/root/shell/linux/linux_log/cpu_info

M_DIR=/root/shell/linux/linux_log/memory_info

P_DIR=/root/shell/linux/linux_log/partitions_info

D_DIR=/root/shell/linux/linux_log/detect_services

W_DIR=/root/shell/linux/linux_log/software_info

A_DIR=/root/shell/linux/linux_log/all

 

# creat time for creat log

DATE=`date +%Y%m%d%H%M%S`

 

#system info

system_info(){

   echo "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"

   echo "system info:"

   echo " System-release(发行版本):`cat /etc/centos-release`"

   echo " Kernel-release(内核版本):`uname -a|awk '{print $1,$3}'`"

   echo " Server-Model(服务器模型):`dmidecode |grep "Product Name:" |sed -n "1p" |awk '{print $1,$3}'`"

   echo

}

 

#CPU info

cpu_info(){

   echo " Frequency(型号名称):`cat /proc/cpuinfo |grep "model name" |uniq |awk -F':' '{print $2}'`"

   echo " CPU cores(CPU核心):`cat /proc/cpuinfo |grep "cpu cores" |uniq |awk -F':' '{print $2}'`"

   echo " Logic count(逻辑处理器个数):`cat /proc/cpuinfo |grep "processor" |sort -u |wc -l`"

   echo " Physical(物理计数):`cat /proc/cpuinfo |grep "physical" |sort -u |wc -l`"

   echo " Cache size(缓存大小):`cat /proc/cpuinfo |grep "cache size" |uniq |awk '{print $4,$5}'`"

   echo

}

 

#memory info

memory_info(){

   memory=`dmidecode |grep "Range Size" |head -1 |awk '{print $3,$4}'`

   mem_size=`echo "This server has ${memory} memory."`

   echo "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"

   echo "Memory info:"

   echo "Memory size(内存大小):${mem_size}"

   echo "Memory Device Count(内存槽位):`dmidecode |grep -A16 "Memory Device$" |grep "Size" |awk '{if($2!~/No/) print $0}' |wc -l`"

}

 

#disk and partitions

partitions_info(){

  swap_pos=`cat /proc/swaps |sed -n '2p' |awk '{print $1}'`

  echo "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"

  echo "Hard disk info(硬盘信息):"

  echo "`fdisk -l |grep Disk |awk -F, '{print $1}'`"

  echo "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"

  echo "Partition info(分区信息):"

  echo "`df -h |grep -v Filesystem |sed "s:none:${swqp_pos}:"`"

}

 

#detect linux server's services(WWW, SSH, FTP, MAIL)

detect_services(){

  echo "`netstat -tuln`" >> /root/shell/linux/result.txt

  echo "Now, I will detect linux server's services!"

  echo -e "The www, ftp, ssh, and mail(smtp) will betect! \n"

  testfile=/root/shell/linux/result.txt

  testing=$(grep ':80' ${testfile})

  if [ "${testing}" != "" ]; then

     echo "WWW is running in your system."

  else

     echo "WWW is stop in your system."

  fi

  testing=$(grep ':22' ${testfile})

  if [ "${testing}" != "" ]; then

     echo "SSH is running in your system."

  else

     echo "SSH is stop in your system."

  fi

  testing=$(grep ':21' ${testfile})

  if [ "${testing}" != "" ]; then

     echo "FTP is running in your system."

  else

     echo "FTP is stop in your system."

  fi

  testing=$(grep ':25' ${testfile})

  if [ "${testing}" != "" ]; then

     echo "Mail is running in your system."

  else

     echo "Mail is stop in your system."

  fi

}

 

#software package

software_info(){

  echo "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"

  echo "SELinux is `cat /etc/selinux/config |grep SELINUX=disabled|awk -F= '{print $2}'||echo "enabled"`"

  echo "`service iptables status |sed 's/Firewall/Iptables/g'`"

  echo "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"

  sed -n '/%packages/,/%post/p;' /root/anaconda-ks.cfg |sed '/%post/d;/^s/d'

  echo "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"

}

 

#content

start_script(){

echo "This program will print your selection !"

echo "s=system, c=cpu, m=memory, p=partition, d=detect-services, w=software"

read -p "Input your choice[s,c,m,p,d,w,all]: " choice    

case ${choice} in

   "s")

       system_info

       if [ ! -d "${S_DIR}" ]; then

      mkdir -p "${S_DIR}"

       fi

       system_info >> ${S_DIR}/system_info_log_${DATE}.log

       echo "****************************************"

   ;;

   "c")

       cpu_info

       if [ ! -d "${C_DIR}" ]; then

            mkdir -p "${C_DIR}"

       fi

       cpu_info >> ${C_DIR}/cpu_info_log_${DATE}.log

       echo "****************************************"

   ;;

   "m")

       memory_info

       if [ ! -d "${M_DIR}" ]; then

            mkdir -p "${M_DIR}"

       fi

       memory_info >> ${M_DIR}/memory_info_log_${DATE}.log

       echo "****************************************"

   ;;

   "p")

       partitions_info

       if [ ! -d "${P_DIR}" ]; then

            mkdir -p "${P_DIR}"

       fi

       partitions_info >> ${P_DIR}/partitions_info_log_${DATE}.log

       echo "****************************************"

   ;;

   "d")

       detect_services

      if [ ! -d "${D_DIR}" ]; then

            mkdir -p "${D_DIR}"

       fi

       detect_services >> ${D_DIR}/detect_services_log_${DATE}.log

       echo "****************************************"

   ;;

   "w")

       software_info

       if [ ! -d "${W_DIR}" ]; then

            mkdir -p "${W_DIR}"

       fi

       software_info >> ${W_DIR}/software_info_log_${DATE}.log

   ;;

   "all")

       system_info

       cpu_info

       memory_info

       partitions_info

       detect_services

       software_info

       if [ ! -d "${A_DIR}" ]; then

            mkdir -p "${A_DIR}"

       fi

       system_info >> ${A_DIR}/all__log_${DATE}.log

       cpu_info >> ${A_DIR}/all__log_${DATE}.log

       memory_info >> ${A_DIR}/all__log_${DATE}.log

       partitions_info >> ${A_DIR}/all__log_${DATE}.log

       detect_services >> ${A_DIR}/all__log_${DATE}.log

       software_info >> ${A_DIR}/all__log_${DATE}.log

      echo "****************************************"

   ;;  

   *)

      echo "Usage ${0} {s,c,m,p,d,w}"

      echo "****************************************"

   ;;

esac

}

 

while [ true ]

do

echo "Please you chioce that what you want know!"

echo "1 ==> start scripts     2 ==> exit"

read -p "Please input you chioce(1,2): " input

    case ${input} in

     "1")

        start_script  

      ;;

      "2")

        echo "goodbye!!!"

        exit 1

      ;;

        *)

        echo "Usage chioce just "1" or "2" !!!"

      ;;

    esac

done

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值