Shell编程4——查询Linux系统/内核信息并用gawk输出

来源:互联网 发布:易到专车比价软件 编辑:程序博客网 时间:2024/06/10 07:01

今天的实验要求编写一个shell程序,通过检查内核状态报告Linux内核行为,在stdout上打印你所使用的Linux主机的下列系统/内核信息:

1.系统的主机名和IP。

2.CPU类型和型号。

3.所使用的Linux内核版本。

4.当前的系统时间和从系统最后一次启动以来到已经经历了多长时间(格式为dd:hh:mm:ss)?

5.总共有多少CPU时间执行在用户态?系统态?空闲态?

6.系统中断情况?

7.内核已经进行了多少次上下文转换?

8.从系统启动以来已经创建了多少进程?

9.计算机配置的内存数和当前可用的内存数量。

 

并且要在上面程序的基础上,加入一个接受用户输入的界面,按用户选择打印相应的信息。如输入“1”打印系统的主机名和IP,输入“2”CPU类型和型号,……

 

最终编写的代码如下:

echo "实验5——内核状态实验"

echo "---------------------------------------------------"

echo "1.系统的主机名和IP"

echo "2.CPU类型和型号"

echo "3.所使用的Linux内核版本"

echo "4.当前的系统时间和从系统最后一次启动以来到已经经历了多长时间"

echo "5.总共有多少CPU时间执行在用户态/系统态/空闲态"

echo "6.系统中断情况"

echo "7.内核已经进行了多少次上下文转换"

echo "8.从系统启动以来已经创建了多少进程"

echo "9.计算机配置的内存数和当前可用的内存数量"

echo "---------------------------------------------------"

checkNum=1

while [ "$checkNum" -ne 0 ]

do

echo

echo "请输入要查询的信息编号(输入0结束程序)"

read checkNum

case $checkNum in

1) echo "系统主机名为`hostname`"

   echo "IP"

   ifconfig|gawk '/inet addr/{print $2}'

;;

2) echo "CPU类型与型号为:"

   cat /proc/cpuinfo|grep "model name"

;;

3) echo "Linux内核版本为`gawk -F " " '/Linux version/{print $3}' /proc/version`"

;;

4) echo "当前系统时间`date +%D%r`"

   echo "系统最后一次启动到现在已经经历了:`cat /proc/uptime`"

;;

5) echo "总共有多少CPU时间执行在用户态/系统态/空闲态:"

   gawk -F " " '/cpu/{print $1":"$2"/"$4"/"$5}' /proc/stat

;;

6) echo "系统中断情况:"

   cat /proc/interrupts

;;

7) echo "内核进行上下文转换次数:`gawk '/ctxt/{print $2}' /proc/stat`"

;;

8) echo "从系统启动以来已经创建的进程数:`gawk '/processes/{print $2}' /proc/stat`"

;;

9) echo "计算机配置的内存数:`gawk '/MemTotal/{print $2}' /proc/meminfo`"

   echo "当前可用的内存数量:`gawk '/MemFree/{print $2}' /proc/meminfo`"

;;

0) echo "程序结束!"

;;

*) echo "$checkNum 为非法输入!"

;;

esac

echo

done

 

 

实验过程中遇到的问题:

①输出语句echo “”中若有命令,需用``括起来,且echo命令会自动换行;

②有些命令本身就是将结果输出到显示器(stdout),不需要再用echo

case语句别忘了结束时的esac

④可用grep命令直接筛选行信息;

case语句中每个正则表达式执行语句若有多条,只在最后加上“;;”

⑥用gawk命令控制输出格式,例:gawk -F " " '/cpu/{print $1":"$2"/"$4"/"$5}' /proc/stat

  其中{print $n}表示输出从“/”间的字符串算起的第n个元素,可一次输出多个元素,之间可通过双引号插入相应的字符串。

⑦系统的中断情况在/proc/interrupts虚拟文件中。

/proc/uptime 2个数字的意义,第一个数值代表系统总的启动时间,第二个数值则代表系统空闲的时间,都是用秒来表示的。

awkgawk的区别:

awk 是早期unix或是Linux下的文本处理工具,gawkGNU所做的awk,它包括awk的所有功能,现在更趋向于用gawk。而且大部分linux发行版本已经把用gawk替换了awk,但为了保留awk的使用习惯,做了个软连接:/bin/awk -> /bin/gawk 。在用的时候,最好先确认有没有安装gawk,因为这是后期的GNU的工具,可能早期版本不一定安装。

 

 

原创粉丝点击