shell图形化界面脚本实现

image.png
image.png
语法:
whiptail --title "<dialog box title>" --yesno "<text to show>" <height> <width>

whiptail --title "<radiolist title>" --radiolist "<text to show>" <height> <width> <list height> [ <tag> <item> <status> ] . . .

进度条:
whiptail --gauge "<test to show>" <height> <width> <inital percent>

1.基于架构/角色进行检测2.检测网络端口映射是否正常3.检测其进程/启动。

shell字符串拼接截取,shell数组如何引入函数,shell图像化界面,以及一些检测和启动服务的命令

#!/bin/bash
. /etc/rc.d/init.d/functions

#此脚本用于---服务运维
#time:2018/10/29
#@一个热爱生活的好少年_lzy

echo_red() {
    stty erase '^H'
    echo -n -e "\033[31m$1\033[0m"
}

echo_red_enter() {
    echo -e "\033[31m$1\033[0m"
}

echo_green() {
    stty erase '^H'
    echo -n -e "\033[32m$1\033[0m"
}

echo_green_enter() {
    echo -e "\033[32m$1\033[0m"
}

function clean_buffer(){

    echo 3 > /proc/sys/vm/drop_caches
}

function warning
{
    if [[ $# = 2 ]];then
        [[ "$1" = 0 ]] && action "$2" /bin/true || action "$2" /bin/false
    elif [[ $# = 1 ]];then
        icontent=$(cat $ERROR_LOG)
        if [[ -n "$icontent" ]];then
            action "$1" /bin/false && cat $ERROR_LOG >> $LOG && rm -rf $ERROR_LOG && exit
        else
            action "$1" /bin/true
        fi
    fi
}

#进程
#定义全局变量
hybird_select_animo=
#界面2
function radiolist() {
    DISTROS=$(whiptail --title "请选择所需要的模块" --radiolist \
    "请选择所需要的脚本?" 15 60 4 \
    "hybird0" "/与网络检测" ON \
    "hybird1" "中架构" OFF \
    "hybird2" "架构" OFF \
    "hybird3" "他()" OFF 3>&1 1>&2 2>&3)
 
    exitstatus=$?
    if [ $exitstatus = 0 ]; then
        hybird_select_animo=$DISTROS
        echo_green_enter "您所选择的模块 $hybird_select_animo" 
    else
        echo "You chose Cancel."
    fi
}

#界面3
function hybird0 {
    OPTION=$(whiptail --title "请选择需要检测的模块" --menu "Choose your option" 15 60 4 \
    "1" "网络联通性)" \
    "2" "t服务检测" \
    "3" "s服务器检测" \
    "4" "all(融合)"  3>&1 1>&2 2>&3)
 
    exitstatus=$?
    #echo > $hytmp
    #shell数组如何传递到函数中
    if [ $exitstatus = 0 ]; then
        #echo "Your chosen option:" $OPTION
        if [ $OPTION == 1 ];then
            echo_green_enter "网络联通性检测:"
            #network_test
            network_test0
        elif [ $OPTION == 2 ];then
            echo "开始检服务:"
           # Hardware 变量融t
          #Process_test $Process_all_rh  
            echo_green "本次共检测nginx rsync memcached 服务"
            Process_all_rh=("nginx" "rsync" "memcached")
            Process_test "${Process_all_rh[*]}"
            Process_all_rh1=("telt" "tele" "ant")
            Process_test_java "${Process_all_rh1[*]}"
            #swift_service_test    
        elif [ $OPTION == 3 ];then
            swift_service_test   
        elif [ $OPTION == 4 ];then
            echo_green_enter "----性能测试:"
            all
            
        fi
    else
        echo "You chose Cancel."
    fi  
}






#swift进程检测

function swift_service_test(){
    echo_red "swift进程检测:"
    ps -ef | grep swift
    sleep 5
    if (whiptail --title "是否继续启动swift服务" --yesno "建议:相关存储服务服务 是否继续执行:请选择" 15 80) then
    echo "You chose Yes. 开始执行环境检测!"  

    swift_proxy restart




else
    echo "You chose No. Exit status was $?."
fi

}



function swift_proxy() {
    systemctl $1 openstack-swift-proxy.service memcached.service rsyncd.service openstack-keystone.service
    systemctl $1 openstack-swift-account.service openstack-swift-account-auditor.service openstack-swift-account-reaper.service openstack-swift-account-replicator.service
    systemctl $1 openstack-swift-container.service openstack-swift-container-auditor.service openstack-swift-container-replicator.service openstack-swift-container-updater.service
    systemctl $1 openstack-swift-object.service openstack-swift-object-auditor.service openstack-swift-object-replicator.service openstack-swift-object-updater.service
}

function swift_object() {
    systemctl $1 rsyncd.service
    systemctl $1 openstack-swift-account.service openstack-swift-account-auditor.service openstack-swift-account-reaper.service openstack-swift-account-replicator.service
    systemctl $1 openstack-swift-container.service openstack-swift-container-auditor.service openstack-swift-container-replicator.service openstack-swift-container-updater.service
    systemctl $1 openstack-swift-object.service openstack-swift-object-auditor.service openstack-swift-object-replicator.service openstack-swift-object-updater.service
}















# #查看telnet命令是否存在
function network_test0 {
    #查看telnet命令是否存在
    which "telnet" > /dev/null
    if [ $? -eq 0 ]
    then
        echo_green_enter "telnet is exist"
        network_telnet
    else
        echo_red "telnet not exist"
        echo "请先安装telnet服务:yum install  -y telnet 即可。"
    fi  

}

#网络层面检测
function network_telnet {
    #如果telnet安装成功

    #shell数组
    array=(www.baidu.com)
    eco_print1="检测结果:该服务器连接"
    eco_print3="主站服务器正常ok"
    eco_print4="主站服务器异常:请尽快开通。"
    #遍历数组
    for(( i=0;i<${#array[@]};i++)) 
        do 
        #echo ${array[i]}; 
        NPORT1=`echo ""|telnet  ${array[i]} 443 2>/dev/null|grep "\^]"|wc -l`
        if [[ $NPORT1 == 1  ]];then
            eco_print=${eco_print1}${array[i]}${eco_print3}
            echo_green ${eco_print}
        else
            eco_print=${eco_print1}${array[i]}${eco_print4}
            echo_red ${eco_print}
            whiptail --title "警告" --msgbox ${eco_print} 10 60
        fi
        sleep 1
        echo " "

    done;


}


#服务进程检测



#变量
eco_Pro_print1="检测结果:该服务"
eco_Pro_print3="已启动正常ok"
eco_Pro_print4="异常未启动(并检测服务器是否部署该服务)"

#function Arrayassignment(){

#}



#将所传的服务进行进程检测
function Process_test() {
    arr=$1
    #轮询上述所传的数组;
    for i in ${arr[*]}; do
        echo $i
        #echo ${array[i]}; 
        A=`ps -C $i --no-header |wc -l`
        echo_green "正在查看服务进程是否存在:"
        ps -ef | grep $i
        sleep 3
        if [ $A -eq 0 ];then                               ## 如果没有进程值得为 零 服务未启动 
            #弹出是否重启服务界面
            #if nginx如何下  teleport(java服务)需要/etc/ini.d/teleport start
            #
            #if 是rsync的话 需要变更为rsyncd
            echo_red "目前无该服务进程"
            if [[ $i == rsync ]]; then

                #statements
                value=${i}"d"

            else
                value=$i
            fi
            
            echo $value
            restart_Process_Interface $value
        
            
        else
            echo_green "该服务正常:进程已启动----------------"

        fi
    done

}

function Process_test_java() {
    arr=$1
    #轮询上述所传的数组;
    for i in ${arr[*]}; do
        echo $i
        #echo ${array[i]}; 
        #A=`ps -C $i --no-header |wc -l`
        echo_green "正在查看服务进程是否存在:"
        ps -ef | grep $i

        if [[ $i == teleport ]]; then

            #statements
            Pvalue=${i}"/"
        elif [[ $i == holmes ]]; then
            #statements
            Pvalue=${i}"/"
        else
            Pvalue=$i
        fi



        A=`ps -ef | grep $Pvalue | wc -l`
        sleep 3
        if [ $A -eq 1 ];then                               ## 如果没有进程值得为 零 服务未启动 
            #弹出是否重启服务界面
            #if nginx如何下  (java服务)需要/etc/ini.d/
            #
            #if 是rsync的话 需要变更为rsyncd
            echo_red "目前无该服务进程:"
            if [[ $i == rsync ]]; then

                #statements
                value=${i}"d"

            else
                value=$i
            fi
            
            echo $value
            restart_Process_Interface_java $value
        
            
        else
            echo_green "该服务正常:进程已启动----------------"

        fi
    done

}


#是否重启服务
function restart_Process(){

    if (whiptail --title "欢迎使用维护脚本" --yesno "提示:是否启动该服务:请选择" 15 80) then
    echo "You chose Yes. 正在启动服务!"  

    #radiolist
    if [[ $hybird_select_animo == hybird0 ]]; then
        hybird0
        #statements:
    elif [[ $hybird_select_animo == hybird1 ]]; then
        #statements
        hybird1
    elif [[ $hybird_select_animo == hybird2 ]]; then
     #statements
        hybird2
    elif [[ $hybird_select_animo == hybird3 ]]; then
        #statements
        hybird3
    fi



else
    echo "You chose No. Exit status was $?."
fi
}

#变量 shell 字符串拼接/截取:
eco_Pro_Interfac_print1="是否重启该服务:"
eco_Pro_Interfac_print3="已启动正常ok"
eco_Pro_Interfac_print4=":服务器异常启动失败(并检测服务器是否部署该服务)"

#界面显示并抉择是否重启/并检测(nginx/rabbit/rsyslog/rsyncd/)
function restart_Process_Interface(){

    restart_Process_name=$1
    eco_Pro_Interfac_print=${eco_Pro_Interfac_print1}${restart_Process_name}
    if (whiptail --title $eco_Pro_Interfac_print --yesno "提示:        是否继续执行:请选择" 15 80) then
        echo "You chose Yes. 开始启动服务!"  
        systemctl  start  $restart_Process_name

        if [[ $restart_Process_name == rsyncd ]]; then
            #statements
            restart_Process_name=rsync
        fi

                #如何判断进程是否存在
        A=`ps -C $restart_Process_name --no-header |wc -l`
        if [ $A -eq 0 ];then                               ## 如果没有进程值得为 零 服务未启动 
            #
            eco_Pro_Interfac_print_error=${restart_Process_name}${eco_Pro_Interfac_print4}
            echo_red $eco_Pro_Interfac_print_error
                    
        else
            eco_Pro_Interfac_print_suc=${restart_Process_name}${eco_Pro_Interfac_print3}
            echo_green $eco_Pro_Interfac_print_suc

         fi

    else
        echo "You chose No. Exit status was $?."
    fi
}

function restart_Process_Interface_java(){

    restart_Process_name=$1
    eco_Pro_Interfac_print=${eco_Pro_Interfac_print1}${restart_Process_name}
    if (whiptail --title $eco_Pro_Interfac_print --yesno "提示:        是否继续执行:请选择" 15 80) then
        echo "You chose Yes. 开始启动服务!"  
        cd /etc/init.d
        ./$restart_Process_name start

        if [[ $restart_Process_name == rsyncd ]]; then
            #statements
            restart_Process_name=rsync
        fi


        A=`ps -ef | grep $Pvalue | wc -l`
        if [ $A -eq 1 ];then                               ## 如果没有进程值得为 零 服务未启动 
            #如何进行字符串拼接
            eco_Pro_Interfac_print_error=${restart_Process_name}${eco_Pro_Interfac_print4}
            echo_red $eco_Pro_Interfac_print_error
                    
        else
            eco_Pro_Interfac_print_suc=${restart_Process_name}${eco_Pro_Interfac_print3}
            echo_green $eco_Pro_Interfac_print_suc

         fi

    else
        echo "You chose No. Exit status was $?."
    fi
}














#执行入口图形化界面
if (whiptail --title "欢迎使用---维护脚本" --yesno "提示:是否继续执行:请选择" 15 80) then
    echo "You chose Yes. 开始执行环境检测!"  

    radiolist
    if [[ $hybird_select_animo == hybird0 ]]; then
        hybird0
        #statements
    elif [[ $hybird_select_animo == hybird1 ]]; then
        #statements
        hybird1
    elif [[ $hybird_select_animo == hybird2 ]]; then
     #statements
        hybird2
    elif [[ $hybird_select_animo == hybird3 ]]; then
        #statements
        hybird3
    fi



else
    echo "You chose No. Exit status was $?."
fi
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,047评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,807评论 3 386
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,501评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,839评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,951评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,117评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,188评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,929评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,372评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,679评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,837评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,536评论 4 335
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,168评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,886评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,129评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,665评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,739评论 2 351

推荐阅读更多精彩内容

  • 官网 中文版本 好的网站 Content-type: text/htmlBASH Section: User ...
    不排版阅读 4,380评论 0 5
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,642评论 18 139
  • 一、Python简介和环境搭建以及pip的安装 4课时实验课主要内容 【Python简介】: Python 是一个...
    _小老虎_阅读 5,735评论 0 10
  • 请问,傻子会不会伤心,做为一个傻子,你忽视爱你的人,你把父母最亲近最真挚的爱当成麻烦,拿出你的所有去爱那个虚幻,我...
    PlscallmeMrtunk阅读 763评论 0 1
  • 感恩!感恩郝现高书记理解支持我的工作,感恩施工单位全力配合。谢谢!谢谢!谢谢! 感恩!腾让消防通道,停车位减少,误...
    梧桐70阅读 256评论 0 0