您的位置:首页 > 运维架构 > Shell

使用shell和python分别实现简单菜单功能--打印当前系统状态信息

2016-06-03 12:35 1071 查看
哥哥我又回来啦,哈哈··好久没来写博客了,现在慢慢把以前的都补上!最近在学习python,所以会更新一些学习中遇到的问题。

今天的内容是用python实现之前学习shell的时候写的一个简单脚本的功能:选择对应的菜单项,打印当前系统的状态信息。
不罗嗦了,上代码:
#!/bin/bash

User ()
{
echo "用户登录记录:"
echo "`last`"
}

Ifcfg ()
{
echo "本机网卡信息如下:"
echo "`ifconfig`"
}

Netstat ()
{
echo "http的并发请求数及其TCP连接状态:"
echo "`netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'`"
}

Nfsstat ()
{
echo " NFS 状态:"
echo "`nfsstat -cn`"
}

System ()
{
echo " 系统版本:"
echo "`lsb_release -a`"
}

Disk ()
{
echo " 磁盘分区使用情况:"
echo "`df -h`"
}

IO ()
{
echo " 磁盘I/O:"
echo "`iostat -dx`"
}

Top ()
{
echo " cpu、内存使用情况:"
echo "`vmstat 5`"
}

PS3="请输入您的选择:"
A="查看当前用户:查看当前网卡参数:查看http并发数:查看NFS状态:系统版本:磁盘分区使用情况:磁盘IO
:cpu内存使用情况:退出脚本" && IFS=:
select i in ${A};do
case $i in
查看当前用户)
User
;;
查看当前网卡参数)
Ifcfg
;;
查看http并发数)
Netstat
;;
查看NFS状态)
Nfsstat
;;
系统版本)
System
;;
磁盘分区使用情况)
Disk
;;
磁盘IO)
IO
;;
cpu内存使用情况)
Top
;;
退出脚本)
exit 0 ;;
*)
echo "没有正确的选择"; exit 1;;
esac
done
python代码实现:
#!/usr/bin/env python
# -*- coding:utf-8 -*-
# Filename: systemstatus.py

import os
# swich case 实现
# This class provides the functionality we want. You only need to look at
# this if you want to know how this works. It only needs to be defined
# once, no need to muck around with its internals.
class switch(object):
def __init__(self, value):
self.value = value
self.fall = False

def __iter__(self):
"""Return the match method once, then stop"""
yield self.match
raise StopIteration

def match(self, *args):
"""Indicate whether or not to enter a case suite"""
if self.fall or not args:
return True
elif self.value in args: # changed for v1.5, see below
self.fall = True
return True
else:
return False

def print_menu():
menu = {
1: "查看当前用户",
2: "查看当前网卡参数",
3: "查看http并发数",
4: "查看nfs状态",
5: "系统版本",
6: "磁盘分区使用情况",
7: "磁盘IO",
8: "cpu内存使用情况",
9: "打印这个菜单"
}
print('系统信息查看工具菜单:')
# 打印整个菜单
for i in menu:
print(i, menu[i])
return
lst = print_menu()
print(lst)
# while True 的部分实现了一个永远不会自己停止的循环。但是在循环内部的if语句中加入条件是可以的,在条件满足时调用break语句。
# 这样一来就可以早循环内部任何地方而不是只在开头(像普通的while循环一样)终止循环。
# if/break 语句自然地将循环分为两个部分:第一部分负责初始化(在普通的while循环中,这部分需要重复),第二部分则在循环条件
# 为真的情况下使用第一部分内初始化好的数据。
while True:
item = input('请输入菜单编号(1-9,留空退出程序):')
if not item: break
for case in switch(item):
if case('1'):
print('当前用户信息:')
os.system('last')
break
if case('2'):
print('当前网卡参数:')
os.system('ifconfig')
break
if case('3'):
print('http并发数:')
os.system("netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'")
break
if case('4'):
print('nfs状态:')
os.system('nfsstat -cn')
break
if case('5'):
print('系统版本:')
os.system('lsb_release -a')
break
if case('6'):
print("磁盘分区使用情况")
os.system('df -h')
break
if case('7'):
print('磁盘IO:')
os.system('iostat -dx')
break
if case('8'):
print('cpu内存使用情况:')
os.system('vmstat 5')
break
if case('9'):
lst = print_menu( )
print(lst)
break
if case(''):
print("退出!")
exit(1)
参考资料:Python实现类似switch...case功能
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  case switch python