文章目录

  • 脚本后续更新说明
  • gitee地址:
  • 项目背景
  • 执行结果如下
  • 脚本目录结构
  • 选项一 系统资源查看
  • CPU信息查看
  • 磁盘信息查看
  • 内存信息查看
  • 网卡信息查看
  • 服务器信息查看
  • 选项二 网卡实时流量
  • 网卡实时流量
  • 选项三 常见服务部署
  • 监控服务(prometheus、zabbix)及其组件
  • 选项四 自定义脚本
  • RPM安装包下载
  • 选项五 Yum仓库配置
  • 选项六 基础环境配置
  • 以选项6为例,检查服务状态
  • 选项七 中间件服务
  • 选项八 docker镜像构建
  • 下面分享一下脚本


脚本后续更新说明

#因假期无聊、再次脚本的基础上进行重构,便于后续的添加、修改等
#且重构的文件数量较多、统一提交给gitee.com

gitee地址:


本文末尾附2千行的脚本,且有些功能尚不支持,可自行复制下载查看

项目背景

最近在微信公众号中看到一篇很有参考意义的脚本脚本大集合,但是却没有对外公布相应的源码

所以空余时间无聊,根据那个那脚本信息,准备把我之前写的相关脚本给串联启动,时间非运维类可以执行,显得非常人性化。

首先,简单介绍一下脚本
执行方式很简单

sh Run.sh
# 或者
bash Run.sh
# 或者
chmod +x Run.sh
./Run.sh
#任选一种都可以完美地执行

执行结果如下

统一运维架构 统一运维门户_sed

主菜单的模块较多,实际上只有选项一选项二完成了,三的话涉及一系列脚本,当前尚未完善,且不准备开放,不做过多的描述,选项四是日常学习过程中用到的小脚本,后续会陆续补充

脚本目录结构

选项一 系统资源查看
CPU信息查看

统一运维架构 统一运维门户_运维_02


先选择CPU,填入数字“1”

统一运维架构 统一运维门户_4s_03

磁盘信息查看

统一运维架构 统一运维门户_sed_04

内存信息查看

统一运维架构 统一运维门户_shell_05

网卡信息查看

统一运维架构 统一运维门户_运维_06

服务器信息查看

统一运维架构 统一运维门户_sed_07

选择"6"的话,会把CPU、磁盘、内存、服务器、网卡的信息都打印在屏幕上

选项二 网卡实时流量
网卡实时流量

统一运维架构 统一运维门户_运维_08

选项三 常见服务部署

统一运维架构 统一运维门户_shell_09

监控服务(prometheus、zabbix)及其组件

统一运维架构 统一运维门户_统一运维架构_10

选项四 自定义脚本

统一运维架构 统一运维门户_shell_11

RPM安装包下载

执行结果如下

统一运维架构 统一运维门户_统一运维架构_12

选项五 Yum仓库配置

yum仓库的添加(在线)

统一运维架构 统一运维门户_sed_13

选项六 基础环境配置

基础环境配置

统一运维架构 统一运维门户_shell_14

以选项6为例,检查服务状态

统一运维架构 统一运维门户_统一运维架构_15

备注:
如果想要安装harbor服务,则执行脚本输入:3 > 4> 1
https的方式方式尚未完善,需要手动修改证书,且生产证书的脚本,则执行脚本输入:4==>2
然后手动修改一下:harbor.yml文件,重新加载服务即可

选项七 中间件服务

统一运维架构 统一运维门户_统一运维架构_16

选项八 docker镜像构建

统一运维架构 统一运维门户_运维_17


统一运维架构 统一运维门户_sed_18

目录添加了kafka的镜像构建方式,当时对应的jdk、kafka的安装包都需要手动下载并上传到指定的目录下

下面分享一下脚本

#!/bin/bash
#所有者:北城半夏
#当前版本
#v1.0.1
#################################################################################
#                                                                               #
#                                   定义变量                                    #
#                                                                               #
#################################################################################
centosVersion=$(awk '{print $(NF-1)}' /etc/redhat-release)
bashpath="$(cd `dirname $0`;pwd)"
#检查当前系统安装包是否已安装如下的rpm包
rpm_name="wget net-tools vim sysstat bash-completion net-tools"
#################################################################################
#                                                                               #
#                                   日志输出                                    #
#                                                                               #
#################################################################################
#
info(){
  echo -e "\033[35m 【`hostname` `date '+%Y-%m-%d %H:%M:%S'`】\033[0m" "\033[36m$1\033[0m "
}
info1(){
  echo -e "\033[36m $1 \033[0m "
}
info2(){
  echo -e "\033[34m 【`hostname` `date '+%Y-%m-%d %H:%M:%S'`】\033[0m" "\033[35m$1\033[0m "
}
info3(){
 info1 "------------------------------------------------------------------------------" 
}
info4(){
  echo -e "\033[32m $1 \033[0m "
}
info5(){
 info1 "==============================================================================" 
}
info6(){
  echo -e "\033[33m 【`hostname` `date '+%Y-%m-%d %H:%M:%S'`】\033[0m" "\033[91m$1\033[0m "
}
info7(){
  echo -e "\033[35m 【`hostname` `date '+%Y-%m-%d %H:%M:%S'`】\033[0m" "\033[32m$1\033[0m "
}

info8(){
  echo -e "\033[31m 【`hostname` `date '+%Y-%m-%d %H:%M:%S'`】\033[0m" "\033[35m$1\033[0m "
}
info9(){
  echo -e "\033[32m 【`hostname` `date '+%Y-%m-%d %H:%M:%S'`】\033[0m" "\033[36m$1\033[0m "
}

#################################################################################
#                                                                               #
#                             服务器相关信息查看                                #
#                                                                               #
#################################################################################
#查看CPU相关信息
getCpuStatus(){
   echo ""
   info5
   Physical_CPUs=$(grep "physical id" /proc/cpuinfo| sort | uniq | wc -l)
   Virt_CPUs=$(grep "processor" /proc/cpuinfo | wc -l)
   CPU_Kernels=$(grep "cores" /proc/cpuinfo|uniq| awk -F ': ' '{print $2}')
   CPU_Type=$(grep "model name" /proc/cpuinfo | awk -F ': ' '{print $2}' | sort | uniq)
   CPU_Arch=$(uname -m)
   load_1=$(uptime |awk -F ":" '{print $NF}'|awk -F "," '{print $1}')
   load_5=$(uptime |awk -F ":" '{print $NF}'|awk -F "," '{print $2}')
   load_15=$(uptime |awk -F ":" '{print $NF}'|awk -F "," '{print $3}')

   #####################################
   info4 "CPU的基本信息"
   info2 "  物理CPU个数:$Physical_CPUs"
   info2 "  逻辑CPU个数:$Virt_CPUs"
   info2 "  每CPU核心数:$CPU_Kernels"
   info2 "      CPU型号:$CPU_Type"
   info2 "      CPU架构:$CPU_Arch"

   info5
   info4 "CPU的负载情况"
   info2 "  一分钟负载:${load_1}"
   info2 "  五分钟负载:${load_5}"
   info2 "十五分钟负载:${load_15}"
   info5
   info4 "CPU进程占用情况"
   printf "\e[34m  %-5s%-8s %-4s%-7s %-6s %-5s %-s %-3s %-s %-5s %-7s %-5s  \e[0m\n"  PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
   top b -n1 | head -17 | tail -10

}

#查看磁盘相关信息
getDiskStatus(){
  echo ""
  info5

  df -hiP | sed 's/Mounted on/Mounted/'> /tmp/inode
  df -hTP | sed 's/Mounted on/Mounted/'> /tmp/disk 
  #cat /tmp/disk 
  local name_disk=()
  local size_disk=()
  local disk_name=$(fdisk  -l| grep "Disk /dev"|awk 'BEGIN{FS=":"};{print $1,$NF}'|awk '{print $2}')
  local disk_Size=$(fdisk  -l| grep "Disk /dev"|awk 'BEGIN{FS=":"};{print $1,$NF}'|awk '{print $3$4}' |awk -F ',' '{print $1}')
  for i in  ${disk_name};do name_disk[${#name_disk[*]}]=$i;done
  for ii in ${disk_Size};do size_disk[${#size_disk[*]}]=$ii;done
  local num=$(fdisk  -l| grep "Disk /dev"|awk 'BEGIN{FS=":"};{print $1,$NF}'|awk '{print $3$4}' |awk -F ',' '{print $1}'|wc -l)
  local num_01=`for((i=0;i<$num;i++)); do echo $i; done`

  info4 "磁盘(disk)的基本信息"
  printf "\e[34m%-35s %-10s \e[0m\n" Disk_name Size
  for i in $num_01
  do
     printf "\e[31m%-35s %-10s \e[0m\n" ${name_disk[i]} ${size_disk[i]}
  done
  info5
  info4 "磁盘(disk)使用详情"
  printf "\e[34m%-32s %-4s %-4s %-4s %-5s %-3s \e[0m\n" Disk_name Size Used Avail Use% Mounted_on
  df -h |grep /dev/
  #join /tmp/disk /tmp/inode | awk '{print $1,$2,"|",$3,$4,$5,$6,"|",$8,$9,$10,$11,"|",$12}'| column -t
  local disk_name_all_1=()
  local disk_uuid1=()
  local disk_type1=()
  local disk_name_all=`blkid|awk -F: '{print $1}'`
  local disk_uuid=`blkid|awk  '{print $2}'|awk -F '"' '{print $2}'`
  local disk_type=`blkid|awk  '{print $3}'|awk -F '"' '{print $2}'`
  for i in  ${disk_name_all};do disk_name_all_1[${#disk_name_all_1[*]}]=$i;done
  for i in  ${disk_uuid};do disk_uuid1[${#disk_uuid1[*]}]=$i;done
  for i in  ${disk_type};do disk_type1[${#disk_type1[*]}]=$i;done
  local num1=$(blkid|awk  '{print $1}' | wc -l)
  local num_02=`for((i=0;i<$num1;i++)); do echo $i; done`
  info5
  info4 "磁盘(disk)设备详情"
  printf "\e[34m%-48s %-24s %-20s \e[0m\n" Disk_name  UUID Type
  for i in $num_02
  do
 #echo ${disk_name_all_1[i]} ${disk_uuid1[i]} ${disk_type1[i]}
  printf "\e[31m%-32s %-40s %-20s \e[0m\n" ${disk_name_all_1[i]} ${disk_uuid1[i]} ${disk_type1[i]}
 done
  info5
  info4 "磁盘(IO)使用详情"
  iostat
  info3
  iostat_log_run
}
#查看内存相关信息
getMemStatus(){
   echo ""
   info5
   info4 "内存检查"
   if [[ $centosVersion < 7 ]];then
      free -mo
   else
     free -h
   fi
 #报表信息
  MemTotal=$(grep MemTotal /proc/meminfo| awk '{print $2}') #KB
  MemFree=$(grep MemFree /proc/meminfo| awk '{print $2}') #KB
  MemAvailable=$(grep -i Cached /proc/meminfo | awk '{print $2}' |head -1) #KB
  SwapTotal=$(grep SwapTotal /proc/meminfo| awk '{print $2}')
  SwapFree=$(grep SwapFree /proc/meminfo| awk '{print $2}') #KB
  let MemUsed=MemTotal-MemFree
  MemPercent=$(awk "BEGIN {if($MemTotal==0){printf 100}else{printf \"%.2f\",$MemUsed*100/$MemTotal}}")
  report_MemTotal="$((MemTotal/1024))" #内存总容量(MB)
  report_MemFree="$((MemFree/1024))" #内存剩余(MB)
  report_MemAvai="$((MemAvailable/1024))" #使用中(MB)
  #swap
  report_swapTotal="$((SwapTotal/1024))""MB" #内存总容量(MB)
  report_swapFree="$((SwapFree/1024))""MB" #内存剩余(MB)
  let Memfree=MemAvailable+MemFree
  let MemUsed=MemTotal-Memfree
  report_Mem="$((Memfree/1024))""MB"
  report_MemUsedPercent="$(awk "BEGIN {if($MemTotal==0){printf 100}else{printf \"%.2f\",$MemUsed*100/$MemTotal}}")""%" #内存使用率%
  info5
  info4 "   内存报表信息查询"
  info2 "          内存总容量(MB):${report_MemTotal}MB"
  info2 "尚未被使用的物理内存数量:${report_MemAvai}MB" 
  info2 "            内存剩余(MB):${report_MemFree}MB+${report_MemAvai}MB=${report_Mem}"
  info2 "              内存使用率:${report_MemUsedPercent}"
  info6 "      交换分区内存总容量:${report_swapTotal}"
  info6 "    交换分区内存使用容量:${report_swapTotal}"

  info5
  info4 "内存进程占用查询" 
  printf "\e[34m%-5s %-5s %-7s %-7s \e[0m\n" PID %MEM RSS COMMAND
  echo -e "$(ps aux | awk '{print $2, $4, $6, $11}' | sort -k3rn | head -n 10 )"| column -t 

}
#网卡信息
getnetworkstatus(){
 echo ""
 local ifs=(`ifconfig | egrep "^e|^d|^l" | awk -F: '{print $1}'`)
 info5
 info4 "网卡及IP"
 info  "网卡名\t IP地址"
 for i in `echo ${ifs[@]}`;do info6 "${i}\t `ifconfig ${i} | awk 'NR==2{print $2}'`" ;done
 info3 
 info4 "网卡基本信息"
 local a=`ifconfig | egrep "^e|^d" |awk -F ':' '{print $1}'`
 local b=`for i in $a;  do  echo $(ifconfig ${i} |grep inet6 |awk '{print $2}') ;done`
 local ipv4=$(for i in $a;do echo "`ifconfig ${i} | awk 'NR==2{print $2}'`" ;done)
 local netmask=$(for i in $a ;do echo `ifconfig  $i|grep netmask|awk '{print $4}'` ;   done)
 local broadcast=$(for i in $a ;do echo `ifconfig  $i|grep broadcast|awk '{print $6}'` ;   done)
 local RX_packets=$(for i in $a ;do echo `ifconfig $i|grep "RX packets"|awk -F '(' '{print $2}'|cut -d ")" -f 1|awk '{print $1}'` ;   done)
 local TX_packets=$(for i in $a ;do echo `ifconfig $i|grep "TX packets"|awk -F '(' '{print $2}'|cut -d ")" -f 1|awk '{print $1}'` ;   done)
 local num=`ifconfig | egrep "^e|^d|^l" |awk -F ':' '{print $1}'|wc -l`
 local num_01=`for((i=0;i<$num;i++)); do echo $i; done`
  #ipv4
  for i in $ipv4 ;do  network_ipv4[${#network_ipv4[*]}]=$i ;done
  #ipv6
  for i in $b;  do network_ipv6[${#network_ipv6[*]}]=$i ; done
  #网卡名
  eth_name=(`ifconfig | egrep "^e|^d" | awk -F: '{print $1}'`)
  #netmask 子网掩码
  for i in $netmask;  do network_netmask[${#network_netmask[*]}]=$i ; done
  #broadcast 默认网关
  for i in $broadcast;  do network_broadcast[${#network_broadcast[*]}]=$i ; done
  #RX packets 出流量
  for i in $RX_packets;  do network_RX_packets[${#network_RX_packets[*]}]=$i ; done
  #TX packets 进流量
  for i in $TX_packets;  do network_TX_packets[${#network_TX_packets[*]}]=$i ; done


 printf "\e[34m%-2s %-15s %-15s %-12s %-0s %-15s %-23s\e[0m\n"  Network IPV4 Netmask Broadcas  RX_packets TX_packets IPV6
 for i in $num_01
  do
   echo -e "${eth_name[i]}\t${network_ipv4[i]}\t${network_netmask[i]}\t${network_broadcast[i]}\t${network_RX_packets[i]}\t${network_TX_packets[i]}\t${network_ipv6[i]}\t"
 done

}

#服务器信息
getservertatus(){
    echo ""
    if [ `rpm -qa | grep ^bc | wc -l` -eq 1 ];then 
    info5
    local code1=`dmidecode |grep -i "system information" -A9 |grep -i -E "Man" |awk -F: '{print $2}'`
    local code2=`dmidecode |grep -i "system information" -A9 |grep -i -E "pro" |awk -F: '{print $2}'`
    local code3=`dmidecode |grep -i "system information" -A9 |grep -i -E "ser" |awk -F: '{print $2}'`
    local bios=`dmidecode -t bios|grep -i Version|awk -F: '{print $2}'`
    #查看逻辑CPU数量
    local cpu1=`cat /proc/cpuinfo |grep "processor" |sort |uniq |wc -l`
    local cpu2=`cat /proc/cpuinfo | grep "physical id" | sort | uniq | wc -l`
    #cpu使用率
    local cpuid=`top -b -n 1|grep -i cpu|awk '/st$/'|awk '{print $8}'|grep ^[0-9]`
    local cpunum=100-${cpuid}
    local ad=`echo ${cpunum}|bc`
    local free1=`free -m|awk '{print $4}'|grep  ^[1-9]|awk 'NR==1'|tr -cd "[0-9]"`
    local avai1=`free -m|awk '{print $7}'|grep ^[0-9]|awk 'NR==1'|tr -cd "[0-9]"`
    local avai=`free -h|awk '{print $7}'|grep ^[0-9]|awk 'NR==1'`
    local disk=`lsblk|grep /$|awk '/\//{print $4}'`
    local total=`free -h|awk '{print $2}'|grep ^[1-9]|awk 'NR==1'`
    local free=`free -h|awk '{print $4}'|grep  ^[1-9]|awk 'NR==1'`
    local num=${free1}+${avai1}
    local upavil=`uptime | awk '{print $(NF-2),$(NF-1),$NF}'`


    info7 "   服务器厂商: ${code1}\033[0m"
    info7 "   服务器版本: ${code2}\033[0m"
    info7 " 服务器序列号: ${code3}\033[0m"
    info7 "   bios版本号: ${bios}\033[0m"
    info7 "  逻辑CPU数量:  ${cpu1}\033[0m"
    info7 "      CPU数量:  ${cpu2}\033[0m"
    info7 "    CPU使用率:  ${ad}\033[0m"
    info7 " 根目录总容量:  ${disk}\033[0m"
    info7 "   内存总容量:  ${total}\033[0m"
    info7 " 内存使用容量:  ${free}+${avai}=$((num))M\033[0m"
    info7 "  cpu平均负载:  ${upavil}\033[0m"
   else
       info3
       info "因脚本需要,需要安装bc命令,请等待!!!"
       yum -y install bc >/dev/null
       [ $? -eq 0 ] && info6 "bc 安装成功"
       getservertatus
 fi
}
#查看网卡实时流量
traffic(){
 local NIC=$1
 echo -e " 进 ------ 出"
 while true; do
    OLD_IN=$(awk '$0~"'$NIC'"{print $2}' /proc/net/dev)
    OLD_OUT=$(awk '$0~"'$NIC'"{print $10}' /proc/net/dev)
    sleep 1
    NEW_IN=$(awk  '$0~"'$NIC'"{print $2}' /proc/net/dev)
    NEW_OUT=$(awk '$0~"'$NIC'"{print $10}' /proc/net/dev)
    IN=$(printf "%.1f%s" "$((($NEW_IN-$OLD_IN)/1024))" "KB/s")
    OUT=$(printf "%.1f%s" "$((($NEW_OUT-$OLD_OUT)/1024))" "KB/s")
    echo "$IN $OUT"
    sleep 1
 done
}
#################################################################################
#                                                                               #
#                             常见脚本,下载RPM安装包                            #
#                                                                               #
#################################################################################
#下载rpm的命令
rpm_run(){
 local dir="$1"
   info "start download ${rpm_name},wait !!!"
   yum  -y install --downloadonly --downloaddir=${dir} ${rpm_name} &>/dev/null
  if [ $? -eq 0 ] ;then
       info "${rpm_name}及相关依赖下载完成,安装包的路径是:${dir}"
     else
       info2 "${rpmdump_name}及相关依赖下载失败,请检查${rpm_name}的yum仓库是否配置"
       exit -1
  fi
}
#配置yum仓库
rpm_wget_repo(){
 if [ -f /etc/yum.repos.d/CentOS-Base.repo  ];then
      info "阿里云yum仓库已配置"
       if [ `rpm -qa | grep epel-release|wc -l` -eq 0 ];then
           yum -y install epel-release.noarch >/dev/null
           [ $? -eq 0 ]&& info4 "epel-release 安装成功"
       fi
  else 
      curl http://mirrors.aliyun.com/repo/Centos-7.repo > /etc/yum.repos.d/CentOS-Base.repo >/dev/null
      rpm_wget_repo
 fi
}
#rpm下载启动
rpm_download_run(){
 info7 "请根据提示选择:"
 read   -p "请输入RPM包存放路径(/opt/rpm):" rpm_dir 
 read   -p "请输入RPM安装包名称:" rpm_name 
 local rpm_dir=${rpm_dir:-/opt/rpm}
 if [ -z ${rpm_dir} ] || [[ -z ${rpm_name} ]];then
    info6 "请重新输入" 
    rpm_log
    rpm_download_run
 else
   #配置yum仓库
   rpm_wget_repo
   rpm_run ${rpm_dir} ${rpm_name}
 fi
}

#################################################################################
# 数据库服务                                                                    #
#                            mysql服务启动脚本                                  #
#                                                                               #
#################################################################################
#
mysql_run(){
    local registory=`docker images --format {{.Repository}}:{{.Tag}}|grep ${mysql_images}|wc -l`

 ###########################docker mysql##################
 [ ! -d ${MYSQL_HOME} ] && mkdir -p ${MYSQL_HOME}

 info2 "Pull the image MySQL Wait !!!"
   if [ ${registory} -ne 1 ];then
         docker pull ${mysql_images} &> /dev/null
   fi
 [ $? -eq 0 ] && info2 "Pull the image MySQL success"
 info2 "Start Mysql to the root user"
 a=`docker ps -a | grep ${mysql_name}|wc -l`
 if [ $a -eq 1 ];then
     docker rm -f ${mysql_name} &>/dev/null
     docker run -d -p ${mysql_port}:3306 --name ${mysql_name} -v ${MYSQL_HOME}:/var/lib/mysql  \
     -e MYSQL_ROOT_PASSWORD=${mysql_passwd} -u root --privileged=true  ${mysql_images} &>/dev/null
 else
     docker run -d -p ${mysql_port}:3306 --name ${mysql_name} -v ${MYSQL_HOME}:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=${mysql_passwd} -u root --privileged=true  ${mysql_images} &>/dev/null
 fi
 [ $? -eq 0 ] && info "Pull the image MySQL success"
 info "mysql root password is ${mysql_passwd}"


}

#启动方式
start_mysql(){
 read -p "请输入mysql数据持久化存储目录(/opt/mysql):" mysql_home
 read -p "请输入mysql容器启动的容器名称(mysql):" mysql_name
 read -p "请输入mysql容器启动的镜像版本(mysql:5.7):" mysql_version
 read -p "请输入mysql容器启动的初始密码(123456):" mysql_password
 read -p "请输入mysql容器启动的初始密码(3306):" mysql_port
 MYSQL_HOME="${mysql_home:-/opt/mysql}"
 mysql_name="${mysql_name:-mysql}"
 mysql_images="${mysql_version:-mysql:5.7}"
 mysql_passwd="${mysql_password:-123456}"
 mysql_port="${mysql_port:-3306}"
 if [ -z ${mysql_home} ] && [ -z ${mysql_name} ] && [ -z ${mysql_version} ]&& [ -z ${mysql_password} ]&& [ -z ${mysql_port} ];then
   info8 "请根据提示,输入所有的值"
   exit 0
 else
 info8 "第一次使用,选择启动方式必须是: run"
 read -p "选择${mysql_name}的启动方式:(run|restart|start|stop|rm)" mysql_start_run1
  case $mysql_start_run1 in
     'run')      
         mysql_run
         info  "\033[34m 进入数据库后执行以下命令进行用户授权 \033[0m"
         info "docker exec -it ${mysql_name} mysql -p${mysql_passwd}"
         info "grant all on *.* to admin@\"%\" identified by \"123qqq...A\" ;";;
     'restart')
         docker restart ${mysql_name} &>/dev/null
         [ $? -eq 0 ] && info " ${mysql_name} Restart successful"||log;;
     'start')
            docker start ${mysql_name} &>/dev/null
            [ $? -eq 0 ] &&  info " ${mysql_name} Start successful"||log;;
     'stop')
           docker stop ${mysql_name} &>/dev/null
           [ $? -eq 0 ] &&   info " ${mysql_name} Stop successful"||log;;
     'rm')
              docker rm -f ${mysql_name} &>/dev/null
           [ $? -eq 0 ] &&  info " ${mysql_name} delete successful"||log;;
      '*')   
              info "脚本执行错误,请检查后继续";;
   esac
  fi
}

redis_run(){
  local registory=`docker images --format {{.Repository}}:{{.Tag}}|grep ${redis_images}|wc -l`

 ###########################docker mysql##################
 [ ! -d ${redis_HOME} ] && mkdir -p ${redis_HOME}/data
 cd ${redis_HOME}
  info2 "加载配置文件"
 cat > redis.conf <<EOF
 bind 0.0.0.0 
 port 6379
 protected-mode no
 daemonize no     
 databases 16  
 masterauth 123456
 dir  ./      
 appendonly yes 
EOF
 sed -i "s/123456/${redis_password}/g"  redis.conf

 info2 "Pull the image ${redis_images} Wait !!!"
   if [ ${registory} -ne 1 ];then
         docker pull ${redis_images} &> /dev/null
   fi
 [ $? -eq 0 ] && info2 "Pull the image  ${redis_images} success"
 info2 "Start ${redis_name} to the root user"

 
 a=`docker ps -a | grep ${redis_name}|wc -l`

 if [ $a -eq 1 ];then
     docker rm -f ${redis_name} &>/dev/null
     docker run -p ${redis_port}:6379 --name ${redis_name} -v ${redis_HOME}/redis.conf:/etc/redis/redis.conf \
           -v ${redis_HOME}/data:/data -d redis redis-server \
             /etc/redis/redis.conf --appendonly yes  &>/dev/null
   else
     docker run -p ${redis_port}:6379 --name ${redis_name} -v ${redis_HOME}/redis.conf:/etc/redis/redis.conf \
           -v ${redis_HOME}/data:/data -d redis redis-server \
             /etc/redis/redis.conf --appendonly yes  &>/dev/null
 fi
 [ $? -eq 0 ] && info "start the image ${redis_name} success"
}

start_redis(){
 read -p "请输入redis数据持久化存储目录(/opt/redis):" redis_home
 read -p "请输入redis容器启动的容器名称(redis):" redis_name
 read -p "请输入redis容器启动的镜像版本(redis:4.0.9):" redis_version
 read -p "请输入redis容器启动的初始密码(123456):" redis_password
 read -p "请输入redis容器启动的初始密码(6379):" redis_port
 redis_HOME="${redis_home:-/opt/redis}"
 redis_name="${redis_name:-redis}"
 redis_images="${redis_version:-redis:4.0.9}"
 redis_password="${redis_password:-123456}"
 redis_port="${redis_port:-6379}"
 if [ -z ${redis_home} ] && [ -z ${redis_name} ] && [ -z ${redis_version} ]&& [ -z ${redis_password} ]&& [ -z ${redis_port} ];then
   info8 "请根据提示,输入所有的值"
   exit 0
 else
 info8 "第一次使用,选择启动方式必须是: run"
 read -p "选择${redis_name}的启动方式:(run|restart|start|stop|rm):" redis_start_run1
 if [ -z ${redis_start_run1} ];then
       info6 "请重新输入"    
       info5
       Service_database
 else
   case $redis_start_run1 in
     'run')      
         redis_run;;
     'restart')
         docker restart ${redis_name} &>/dev/null
         [ $? -eq 0 ] && info " ${redis_name} Restart successful";;
     'start')
            docker start ${redis_name} &>/dev/null
            [ $? -eq 0 ] &&  info " ${redis_name} Start successful";;
     'stop')
           docker stop ${redis_name} &>/dev/null
           [ $? -eq 0 ] &&   info " ${redis_name} Stop successful";;
     'rm')
              docker rm -f ${redis_name} &>/dev/null
           [ $? -eq 0 ] &&  info " ${redis_name} delete successful";;
      '*')   
              info "脚本执行错误,请检查后继续";;
   esac
  fi
 fi
}


#################################################################################
#                                                                               #
#                            中间件服务启动脚本                                  #
#                                                                               #
#################################################################################
zk_server(){
 local registory=`docker images --format {{.Repository}}:{{.Tag}}|grep ${zookeeper_version}|wc -l`
 if [ ${registory} -eq 0 ];then
     docker pull ${node_exporter_images} &>/dev/null
  else
    bashpath="$(cd `dirname $0`;pwd)"
    [ ! -d ${zookeeper_home} ] && mkdir -p ${zookeeper_home}
    [ $? -eq 0 ] && info "mkdir ${zookeeper_home} success"
    if [ `docker ps -a | grep  ${zookeeper_name}|wc -l` -eq 1 ];then
         docker rm -f ${zookeeper_name}
         docker run -d -p ${zk_port}:2181 -v ${zookeeper_home}:/data/  \
               --name zookeeper --privileged ${zookeeper_version} &>/dev/null
         [ $? -eq 0 ] && info "${zookeeper_name} start success"
     else
         docker run -d -p ${zk_port}:2181 -v ${zookeeper_home}:/data/  \
               --name zookeeper --privileged ${zookeeper_version} &>/dev/null
         [ $? -eq 0 ] && info "${zookeeper_name} start success"
   
   fi
 fi
}
start_zk(){
  echo ""
  info5
  read -p "请输入zookeeper数据持久化存储目录(/opt/zookeeper):" zookeeper_home
  read -p "请输入zookeeper容器启动的容器名称(zookeeper):" zookeeper_name
  read -p "请输入zookeeper容器启动的容器端口(2181):" zk_port
  read -p "请输入zookeeper容器启动的镜像版本(zookeeper:3.4.9):" zookeeper_version
  zookeeper_version=${zookeeper_version:-zookeeper:3.4.9}
  zookeeper_name=${zookeeper_name:-zookeeper}
  zk_port=${zk_port:-2181}
  zookeeper_home=${zookeeper_home:-/opt/zookeeper}


  if [ -z ${zookeeper_version} ] && [ -z ${zookeeper_name} ] && [ -z ${zk_port} ]&& [ -z ${zookeeper_home} ];then
   info8 "请根据提示,输入所有的值"
   exit 0
 else
 info8 "第一次使用,选择启动方式必须是: run"
 read -p "选择${zookeeper_name}的启动方式:(run|restart|start|stop|rm):" zk_start_run1
 if [ -z ${zk_start_run1} ];then
       info6 "请重新输入"    
       info5
       middleware_server_run
 else
   case $zk_start_run1 in
     'run')      
         zk_server;;
     'restart')
         docker restart ${zookeeper_name} &>/dev/null
         [ $? -eq 0 ] && info " ${zookeeper_name} Restart successful";;
     'start')
            docker start ${zookeeper_name} &>/dev/null
            [ $? -eq 0 ] &&  info " ${zookeeper_name} Start successful";;
     'stop')
           docker stop ${zookeeper_name} &>/dev/null
           [ $? -eq 0 ] &&   info " ${zookeeper_name} Stop successful";;
     'rm')
              docker rm -f ${zookeeper_name} &>/dev/null
           [ $? -eq 0 ] &&  info " ${zookeeper_name} delete successful";;
      '*')   
              info "脚本执行错误,请检查后继续";;
   esac
  fi
 fi

}
#################################################################################
#                                                                               #
#                            harbor服务启动脚本                                  #
#                                                                               #
#################################################################################
start_harbor(){
   echo ""
 info5 
 source ${bashpath}/script/base_harbor.sh
 read -p "      离线安装包名称,默认(harbor-offline-installer-v2.0.1.tgz):" harbor_images
 read -p "  离线安装包存放路径,默认(/opt):" harbor_path
 read -p "离线安装包解压后名称,默认(harbor):" harbor_name_path
 read -p "离线安装包的镜像名称,默认(harbor.v2.0.1.tar.gz)" harbor_images_name
 read -p "    Harbor访问的域名,默认(registry.harbor.com):" harbor_hostname
 read -p "Harbor访问平台的密码,默认(Harbor12345):" harbor_password
 read -p "Harbor访问平台的端口,默认(8081):" harbor_http_port
 read -p "    Harbor数据持久化,挂载卷(\/opt\/harbor\/data):" harbor_volume
 local harbor_images=${harbor_images:-harbor-offline-installer-v2.0.1.tgz}
 local harbor_path=${harbor_path:-/opt}
 local harbor_hostname=${harbor_hostname:-registry.harbor.com}
 local harbor_password=${harbor_password:-Harbor12345}
 local harbor_http_port=${harbor_http_port:-8081}
 local harbor_name_path="${harbor_name_path:-harbor}"
 local harbor_images_name=${harbor_images_name:-harbor.v2.0.1.tar.gz}
 local harbor_volume=${harbor_volume:-\/opt\/harbor\/data}
 #在线下载路径
 harbor_compose_path="/opt/harbor"
 docker_compose_name="docker-compose"
 harbor_conn="https://github.com/goharbor/harbor/releases/download/v2.3.1/harbor-offline-installer-v2.3.1.tgz"
 harbor_conn_name="harbor-offline-installer-v2.3.1.tgz"
 docker_compose_conn="https://github.com/docker/compose/releases/download/1.25.1/docker-compose-$(uname -s)-$(uname -m)"

 if [[ $1 == "install" ]];then
 if [ -d ${harbor_path}/${harbor_name_path} ];then
       if [ -f ${harbor_path}/${harbor_name_path}/${docker_compose_name} ];then
              harbor_install    
       else
              harbor_install_zaixian
       fi
 else
      if [ -d ${harbor_path}/${harbor_name_path} ];then
             info "Harbor installation directory already exists"
        else
            mkdir -p ${harbor_path}/${harbor_name_path}
            log
            exit 0
           
      fi
 fi
 else
    Usage 
    exit -1
  
 fi
}
#################################################################################
#                                                                               #
#                            常用脚本使用                                        #
# 服务器系统配置初始化脚本                                                        #
#################################################################################
#常用脚本使用									                                          #
#										                                                  #
#服务器系统配置初始化脚本							                                     #
#################################################################################
run_set_system(){
   echo ""
   info5
 # 设置时区并同步时间
 read -p "设置ssh超时时间(600):" time
 read -p "是否禁止root用户远程登录(yes),默认允许:" ban
 read -p "是否安装基础安装包(vim,wget...),默认允许安装(yes):" install
 read -p "是否检查基础设置是否成功(yes/no),默认自动检查:" check_system
 read -p "设置主机名称(myos):" hostname_name
 info "重新加载yum仓库,请等待!!!"
 yum makecache >/dev/null 
 local repolost_num=`yum repolist|grep repolist|awk -F: '{print $2}'|cut -c2`
 local check_system=${check_system:-yes}
 local tmout_time=${time:-600}
 local ban_root=${ban:-no}
 local install_run=${install:-yes}
 local hostname_name=${hostname_name:-myos}
 #判断
 if [ $repolost_num -eq 0 ];then
   read -p "检测到没有yum仓库,是否添加阿里云yum仓库(yes/no),默认添加:"  aliyun_yum_1
   aliyun_yum_2=${aliyun_yum_1:-yes}
   if [ ${aliyun_yum_2} == "yes" ] ;then
       aliyun_yum           
   fi 
 fi
 #设置主机名
 info6 "设置主机名${hostname_name}"
 hostnamectl set-hostname ${hostname_name} 


 info6 "设置时区,并同步时间"
 time=`timedatectl |grep "Time zone"|awk '{print $3}'`
 if [ ${time} == "Asia/Shanghai" ];then
          info7 "当前时区:${time}"
     else
          info7 "当前时区:${time}"
             info "Set time zone to Shanghai"
             timedatectl set-timezone Asia/Shanghai
             info `timedatectl |grep "Time zone"|awk '{print $3}'` 
  fi
 #ln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
 #if [ `crontab -l |grep ntpdate|wc -l` -eq 0 ]; then
 #   echo "* 1 * * * ntpdate ntp1.aliyun.com >/dev/null 2>&1"
 #fi

 # 禁用selinux
 info6 "设置selinux策略模式"
 selinux=`sestatus |grep "SELinux status" |awk '{print $3}'`
 if [ ${selinux} == disabled ];then
        echo -e "\033[32m selinux禁用成功 \033[0m"
  else
        info6 "Disable SELinux"
        setenforce 0
       # sed -i 's/^SELINUX=.\*/SELINUX=disabled/' /etc/selinux/config
        sed -i  '/^SELINUX/s/enforcing/disabled/'  /etc/selinux/config
      [ $? -eq 0 ] && info9 "设置selinux策略的状态disabled成功,重启生效"
 fi
 # 关闭防火墙
 info6 "开始关闭防火墙"
 if egrep "7.[0-9]" /etc/redhat-release &>/dev/null; then
    systemctl stop firewalld  >/dev/null
    systemctl disable firewalld  >/dev/null
 elif egrep "6.[0-9]" /etc/redhat-release &>/dev/null; then
    service iptables stop  >/dev/null
    chkconfig iptables off  >/dev/null
 fi
 [ $? -eq 0 ] && info9 "firewalld 关闭成功"


 # 历史命令显示操作时间
 info6 "修改history历史命令的输出格式"
 if ! grep HISTTIMEFORMAT /etc/bashrc; then
    echo 'export HISTTIMEFORMAT="%F %T `whoami` "' >> /etc/bashrc  >/dev/null
 fi
 [ $? -eq 0 ] && info9 "history历史命令的输出格式已设置"



 # SSH超时时间
 info6 "设置ssh超时时间"
 if ! grep "TMOUT=${tmout_time}" /etc/profile &>/dev/null; then
    echo "export TMOUT=${tmout_time}" >> /etc/profile
 fi
 [ $? -eq 0 ] && info9 "超时时间设置:TMOUT=${tmout_time}"
 

 # 禁止root远程登录
 if [ ${ban_root} == "yes" ];then
    info6 "禁止root远程登录"
    sed -i 's/#PermitRootLogin yes/PermitRootLogin no/' /etc/ssh/sshd_config
    [ $? -eq 0 ] && info9 "禁止root远程登录,设置成功"
 fi 
 # 禁止定时任务向发送邮件
 info6 "设置禁止定时任务向发送邮件"
 sed -i 's/^MAILTO=root/MAILTO=""/' /etc/crontab
 [ $? -eq 0 ] && info9 "禁止定时任务向发送邮件设置成功"

 # 设置最大打开文件数
 info6 "设置最大打开文件数"
 if ! grep "* soft nofile 65535" /etc/security/limits.conf &>/dev/null; then
      cat >> /etc/security/limits.conf << EOF
    * soft nofile 65535
    * hard nofile 65535
EOF
    ulimit  -n 65535
    ulimit -SHn 65535
 fi
 [ $? -eq 0 ] && info9 "设置最大打开文件数"

 # 禁用SWAP使用
  Free=`free -h|grep -i swap|awk '{print $2}'|cut -c 1`
 if [ ${Free} -eq 0 ];then
        info7 "Swap禁用成功"
   else
        info7 "Swap未禁用"
        info "Disable swap"
        swapoff -a
        sed -ri 's/.*swap.*/#&/' /etc/fstab  
        info "Disable swap success"
 fi
 swapoff -a
 echo "0" > /proc/sys/vm/swappiness



 # 安装系统性能分析工具及其他
 if [ ${install_run} == "yes" ];then
    info6 "安装系统性能分析工具及其他,请等待!!!"
    yum  -y install ${rpm_name} >/dev/null
    [ $? -eq 0 ] && info9 "安装系统基础工具:\n ${rpm_name} install success"
 fi
 # 系统内核优化
 local system_num=`egrep "tcp_syncookies|tcp_max_tw_buckets|max_syn_backlog|netdev_max_backlog|tcp_fin_timeout" /etc/sysctl.conf |wc -l `
 if [ ${system_num} -eq 0 ];then
 cat >> /etc/sysctl.conf << EOF
 net.ipv4.tcp_syncookies = 1
 net.ipv4.tcp_max_tw_buckets = 20480
 net.ipv4.tcp_max_syn_backlog = 20480
 net.core.netdev_max_backlog = 262144
 net.ipv4.tcp_fin_timeout = 20
EOF
 fi
 
 if [ ${check_system} == "yes" ];then
       check_system_run
 fi
}
####################################################
#清理登录系统的信息
Clean_up_system_login(){
  echo ""
  info5
  read -p "是否检查历史命令信息,默认显示最后10行(yes/no):" history_name
  read -p "是否检查登录系统的用户名单,默认允许(yes/no):" last_name
  read -p "是否检查登入系统失败的用户相关信息,默认允许(yes/no):" lastb_name
  read -p "是否确认全部清理系统登录信息(yes/no),默认禁止:" name 
  info3
 local name=${name:-no}
 local lastb_name=${lastb_name:-yes}
 local last_name=${last_name:-yes}
 local history_name=${history_name:-yes}
   if [ ${history_name} == yes ];then
    info "显示最后10行历史命令"
    cat /$USER/.bash_history |tail -10
 fi
  if [ ${lastb_name} == yes ];then
   info "登录系统的用户名单"
     last |head -10
 fi
  if [ ${history_name} == yes ];then
    info "显示最后10行历史命令"
    cat /$USER/.bash_history |tail -10
 fi
 if [ ${lastb_name} == yes ];then
    info6 "登入系统失败的用户相关信息"
     lastb  |head -10
 fi

 if [ ${name} == yes ];then 
    echo > /var/log/wtmp
    echo > /var/log/btmp 
    echo > /$USER/.bash_history

    [ $? -eq 0 ] && info "系统登录信息清理成功"
 fi

}
#统计当前系统中可以登录计算机的账户有多少个
Count_the_number(){
   echo ""
   info5 
   count_num=`grep "bash$" /etc/passwd | wc -l`
   info "当前系统中可以登录计算机的账户: ${count_num}"
   
}
Count_number_documents(){
   echo ""
   info5 
   # 统计/var/log 有多少个文件,并显示这些文件名 
   # 使用 ls 递归显示所有,再判断是否为文件,如果是文件则计数器加 1
   cd  /var/log
   sum=0
 info4 "/var/log的文件名"
 info3
 for i in `ls -r *`
 do
   if [ -f $i ];then
       let sum++
         info2 "文件名:$i"
     fi
 done
 info3
 info "总文件数量为:$sum"
}
################################################################################
#                                                                              #
#                                   进度条                                     #
#                                                                              #
################################################################################
processBar(){
    now=$1
    all=$2
    arr=('|' '/' '-' '\\')
    percent=`awk BEGIN'{printf "%f", ('$now'/'$all')}'`
    len=`awk BEGIN'{printf "%d", (100*'$percent')}'`
    bar='>'
    for((i=0;i<len-1;i++))
    do
        bar="#"$bar
    done
    #printf "[%-10s][%03d/%03d]\r" $bar $len 100  
    for((i=0;i<=${now};i++))
     do 
       let index=i%4
    printf  "[%-10s][%03d/%03d]\r[%c]" $bar $len 100 ${arr[$index]}
     done
}
run_process(){
 whole=$1
 process=$2
 while [ $process -lt $whole ] 
 do
    let process++   
    processBar $process $whole
    sleep 0.1
 done
 printf "\n"
}


################################################################################
#                                                                              #
#                                   yum源                                      #
#                                                                              #
################################################################################
install_chronyd_server(){
   echo ""
   info5
   local chronyd_rpm=`rpm -qa | grep chrony|wc -l`
   read -p "允许客户端登连接服务端的网段,默认(192.168.1.0/24)" ntp_ipaddr
   local ntp_ipaddr=${ntp_ipaddr:-192.168.1.0/24}
   if [ ${chronyd_rpm}  -eq 1 ];then 
        info2 "`rpm -qa | grep chrony` 已安装"
        info5
         if [ -f  /etc/chrony.conf ];then
                #修改配置文件
                sed -i '/^server/ s/^\(.*\)$/#\1/g' /etc/chrony.conf
                sed -i '/^# Please/ a server ntp2.aliyun.com  iburst'  /etc/chrony.conf
                #allow 192.168.0.0/16
                sed -i "25 a allow $ntp_ipaddr"  /etc/chrony.conf
                systemctl  restart chronyd.service
                systemctl  enable chronyd.service
                info3
                info2 "验证时间同步是否成功"
                chronyc sources -v
          else
               info6 "/etc/chrony.conf 不存在,请检查后重试"
               exit 0
          fi
   else
       yum -y install chrony >/dev/null
       if [ $? -eq 0  ];then    
           
          if [ -f  /etc/chrony.conf ];then
                #修改配置文件
                sed -i '/^server/ s/^\(.*\)$/#\1/g' /etc/chrony.conf
                sed -i '/^# Please/ a server ntp2.aliyun.com  iburst'  /etc/chrony.conf
                #allow 192.168.0.0/16
                sed -i "25 a allow $ntp_ipaddr"  /etc/chrony.conf
                systemctl  restart chronyd.service
                systemctl  enable chronyd.service
                info3
                info2 "验证时间同步是否成功"
                chronyc sources -v
          else
               info6 "/etc/chrony.conf 不存在,请检查后重试"
               exit 0
          fi
       else
            read -p "是否加载阿里云yum(yes/no):" aliyun_yum_3 
            local aliyun_yum_3=${aliyun_yum_3:-yes}
                if [ $aliyun_yum_3 == "yes" ];then
                      aliyun_yum
                 else
                      info6 "未加载yum源,检查口进行确定"
                      exit 0
                fi 
       fi
   fi
 }
 
install_chronyd_client(){
  echo ""
   info5
   local chronyd_rpm=`rpm -qa | grep chrony|wc -l`
   read -p "客户端登连接服务端的地址,默认(192.168.1.100)" ntp_ipaddr
   local ntp_ipaddr=${ntp_ipaddr:-192.168.1.100}
   if [ ${chronyd_rpm}  -eq 1 ];then 
        info2 "`rpm -qa | grep chrony` 已安装"
        info5
         if [ -f  /etc/chrony.conf ];then
                #修改配置文件
                sed -i '/^server/ s/^\(.*\)$/#\1/g' /etc/chrony.conf
                sed -i "/^# Please/ a server $ntp_ipaddr  iburst"  /etc/chrony.conf
                systemctl  restart chronyd.service
                systemctl  enable chronyd.service
                info3
                info2 "验证时间同步是否成功"
                chronyc sources -v
          else
               info6 "/etc/chrony.conf 不存在,请检查后重试"
               exit 0
          fi
   else
       yum -y install chrony >/dev/null
       if [ $? -eq 0  ];then    
           
          if [ -f  /etc/chrony.conf ];then
                #修改配置文件
                sed -i '/^server/ s/^\(.*\)$/#\1/g' /etc/chrony.conf
                sed -i "/^# Please/ a server $ntp_ipaddr  iburst"  /etc/chrony.conf
                systemctl  restart chronyd.service
                systemctl  enable chronyd.service
                info3
                info2 "验证时间同步是否成功"
                chronyc sources -v
          else
               info6 "/etc/chrony.conf 不存在,请检查后重试"
               exit 0
          fi
       else
            read -p "是否加载阿里云yum(yes/no):" aliyun_yum_3 
            local aliyun_yum_3=${aliyun_yum_3:-yes}
                if [ $aliyun_yum_3 == "yes" ];then
                      aliyun_yum
                 else
                      info6 "未加载yum源,检查口进行确定"
                      exit 0
                fi 
       fi
   fi
}

#################################################################################
#                                                                               #
#                            docker基础环境部署                                 #
#                                                                               #
#################################################################################
#
install_docker(){
 #官方网站下载最新版docker
  info "官方网站下载最新版docker"
  yum install -y vim  yum-utils bash-completion net-tools gcc ipvsadm  wget ipset bc &>/dev/null
  if [ $? -eq 0 ];then
          info "安装docker的相关依赖包"
        else
          info8 "install docker CE fail"
  fi
  wget -O  /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo  &>/dev/null
  yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo &>/dev/null
   if [ $? -eq 0 ];then
          info "添加docker的在线yum仓库"
        else
          info8 "install docker CE fail"
  fi
  info6 "重新加载yum仓库,根据网速决定等待的时间,请耐心等待!!!"
  yum makecache &>/dev/null
  info "yum仓库加载成功"
  info3 
  info4 "开始安装docker基础环境,亲耐心等待"
  yum -y install docker-ce &> /dev/null
  [ $? -eq 0 ] && info2 "docker 环境安装成功" 
  #开启路由转发
 cat >>/etc/sysctl.conf<<EOF
 net.ipv4.ip_forward = 1
EOF
 sysctl -p  &>/dev/null

 #添加阿里云镜像加速器
 mkdir -p /etc/docker
 tee /etc/docker/daemon.json <<-'EOF'
 {
   "registry-mirrors": ["https://geuj9lut.mirror.aliyuncs.com"]
 }
EOF

}
#启动docker
start_docker(){
 if [ `rpm -qa|grep docker |wc -l` -eq 0 ];then
   install_docker
     systemctl daemon-reload
     systemctl restart docker
     systemctl enable docker >/dev/null
  else
    a=`rpm -qa|grep docker-ce|tail -1`
   info8 "\033[32m ${a}已安装,不需要重新部署\033[0m"
   local docker_status=`systemctl  status docker |grep Active|awk '{print $2}'`
     if [ ! ${docker_status} == "active" ];then
         systemctl start docker
         info8 "\033[32m docker服务已重新正常启动\033[0m"
      else
         info8 "\033[32m docker服务已正常启动!!!\033[0m"
         run
    fi    
  fi

}
#################################################################################
#                                                                               #
#                              环境检查                                         #
#                                                                               #
#################################################################################
#网络状态检查函数
network_check(){
 echo ""
 info2 "正在检测网络,请稍等..."
   ping -c 2 www.baidu.com >/dev/null
 if [ $? -eq 0 ];then
    info7 "网络连接正常,请继续!!!"
   info3
   else
   info6 "网络连接失败,请检查网络后重新执行"
   network_check_run="1"
   exit -1
 fi
}

#docker环境检查
docker_check(){
 echo ""
 info7 "正在检测docker基础环境,请稍等..."
 local docker_version=`docker --version|awk -F ',' '{print $1}'|awk '{print $3}'`
 local docker_status=`systemctl  status docker |grep Active|awk '{print $2}'`
 local docker_driver=`docker info | grep -i "Cgroup Driver"|awk  '{print $3}'`
 local docker_home=`docker info|grep -i "docker root dir"|awk  '{print $4}'`

 if [ ${docker_status} == "active" ];then
    info2 "docker      版本: ${docker_version}"
    info2 "docker      状态: ${docker_status}"
    info2 "docker  文件系统: ${docker_driver}"
    info2 "docker    家目录: ${docker_home}"
    info7 "docker基础环境正常运行,请继续!!!"
   echo "-------------------------------------------------------------------"
   else
   info6 "docker未启动或者当前机器未安装docker,请选择\"docker基础环境\"先安装环境后再启动服务"
   server_run
 fi
}
#基础环境检查
check_system_run(){
 #定义变量
 local sorf=`ulimit  -n`
 local hard=`ulimit  -Hn`
 local selinux=`sestatus |grep "SELinux status" |awk '{print $3}'`
 local time=`timedatectl |grep "Time zone"|awk '{print $3}'`
 local selinux=`sestatus |grep "SELinux status" |awk '{print $3}'`
 local firewalld=`systemctl status firewalld|awk '/Active/{print $2}'`
 local tmount=`grep TMOUT /etc/profile | awk '{print $2}'`
 local Free=`free -h|grep -i swap|awk '{print $2}'|cut -c 1`
 local rpm=`rpm -qa | egrep "wget|net-tools|vim|sysstat|bash-completion|net-tools" `
 local num=`rpm -qa | egrep "wget|net-tools|vim|sysstat|bash-completion|net-tools" |wc -l `
 local num_01=`for((i=0;i<$num;i++)); do echo $i; done`
 
 echo ""
 info5
 info8 "时区检查"
  if [ ${time} == "Asia/Shanghai" ];then
          info7 "当前时区:${time}"
          info3
          info4 "时间同步服务"
          chronyc sources -V
          info3
     else
          info7 "当前时区:${time}"
          info3
          info4 "时间同步服务"
          chronyc sources -V
          info3
  fi
 info3 
 info8 "selinux策略模式"
 if [ ${selinux} == disabled ];then
        info7 "selinux禁用成功,${selinux}"
  else
        info7 "selinux尚未禁用,${selinux}" 
 fi
 info3
 info8 "firewalld防火墙"
 if [ $firewalld == "inactive" ];then
       info7 "firewalld禁用成功 \033[0m"
  else
       info7 "firewalld尚未禁用 \033[0m"
 fi

 if [ ! -z $tmount  ];then
 info3
        info8 "ssh超时时间"
        info7 "${tmount}"
 fi
 local ssh_port=`ss -ntulp | grep sshd|awk  'NR==1{print $5}' |awk -F: '{print $2}'`
  if [ ! -z $ssh_port  ];then
 info3
        info8 "ssh端口"
        info7 "${ssh_port}"
 fi
 info3
 info8 "文件描述符"
   info7 "最大警告值:soft ${sorf}"
   info7 "      阈值:hard ${hard}"
 info3
 info8 "交换分区"
 if [ ${Free} -eq 0 ];then
        info7 "Swap禁用成功"
   else
        info7 "Swap未禁用"
        info7 "交换分区总total: `free -h|grep -i swap|awk '{print $2}'`"
 fi
 info3
 info8 "基础工具"
 for i in $rpm ;do rpm_check[${#rpm_check[*]}]=$i ;done
 info4 "查看${rpm_name}\n 是否安装:"
 for i in $num_01
  do
    info6 "${rpm_check[i]}"
 done

 info3
 info8 "系统内核优化"
 cat /etc/sysctl.conf |grep -v  "^#" |grep $#
 info5

}

check_k8s_docker_run(){
   info3
   docker_check
   if [ $? -eq 0 ];then
     if [ `rpm -qa | grep kubelet|wc -l` -eq 1 ];then
      info1 "check k8s status"
      info2 "k8s version list"
         kubectl version
      echo ""
      info2 "All Healthy status check"
         kubectl get componentstatus
      echo ""
         info2 "k8s cluster info list"
      kubectl cluster-info
      echo ""
      info2 "k8s all nodes list"
         kubectl get nodes
      info2 "k8s all-namespaces's pods list"
         kubectl get pod --all-namespaces
      echo ""
      info2 "k8s all-namespaces's service network"
         kubectl get svc --all-namespaces
      echo ""
      info4 "===================================k8s welcome for you==================================="
   else
      info6 "当前机器未安装k8s.请安装后重试"
       exit 0
   fi
 else
      info6 "请检查docker环境是否安装"
      server_run
 fi

}
#检查harbor的状态
start_harbor_check(){
   echo ""
   info5
   local compose_pant_name=`find /usr/local/ -name docker-compose |wc -l`
   if [ ${compose_pant_name} -eq 1 ];then
   read -p "请输入harbor的安装目录,默认(/opt/harbor/harbor):" harbor_path
   local harbor_path=${harbor_path:-/opt/harbor/harbor}
   read -p "请选择重启(restart),启动(start),停止(stop),默认(check):" harbor_check
   local harbor_check=${harbor_check:-check}
   info3
   cd ${harbor_path}
   case $harbor_check in
     'check')
            docker-compose ps
            if  [ `docker-compose ps|grep -i exit|wc -l` -ne 0 ];then
                  info8 "重新harbor服务,请稍等"
                  docker-compose down -v
                  docker-compose up -d
            fi;;
     'restart')
             docker-compose down -v
              
             [ $? -eq 0 ] && check " ${harbor_name_path} Restart successful";;
     'start')
             docker-compose up -d
            [ $? -eq 0 ] &&  check " ${harbor_name_path} Start successful";;
     'stop')
             docker-compose down -v
           [ $? -eq 0 ] &&   check " ${harbor_name_path} Stop successful";;
       '*')   
              info  "\033[91m sh $0 start|stop|restart \033[0m"
              info "脚本执行错误,请检查后继续";;
    esac
  else
    info8 "Harbor在【`hostname`】主机中未安装"
  fi  
}
################################################################################
#                                                                              #
#                              启动函数                                        #
#                                                                              #
################################################################################
#启动函数
#1、系统资源查看
system_run(){
           System_resources
        if [ -z ${system} ];then
          info6 "请重新输入"    
          info5
          run
    else
      case ${system} in
         '1')
            getCpuStatus;;
         '2')
            getDiskStatus;;
         '3')
            getMemStatus;;
         '4')
            getnetworkstatus;;
         '5')
            getservertatus;;
         '6')
            getCpuStatus
            getMemStatus
            getDiskStatus
            getnetworkstatus
            getservertatus
            ;;
         'q')
            echo ""
            exit 0;;
         
         esac
         fi
}
#2.网卡实时流量
traffic_run(){
 echo ""
 local traffic_name=$(ifconfig  |grep mtu|awk -F ':' '{print $1}')
 info5
 info "当前主机上的网卡名称"
 ifs=(`ifconfig | egrep "^e|^d|^l" | awk -F: '{print $1}'`)
 printf "\e[36m %-10s %-8s \e[0m\n"  网卡名 IP地址
 for i in `echo ${ifs[@]}`;do echo -e "${i}\t `ifconfig ${i} | awk 'NR==2{print $2}'`" ;done
 #for i in $traffic_name; do  echo $i; done
 info3
 echo  "q【退出】                                                         Enter【主页面】" 
 read -p "输入的网卡名称:" network
 if [ -z ${network} ];then
      info6 "请输出网卡名称,当前未输入"
      info6 "请重新输入"   
      info5 
      run
   else
     if [ ${network} == "q" ];then
          exit 0
     else
         traffic ${network}
   fi
 fi
}
#监控服务(prometheus、zabbix)及其组件
monitor_server_run(){
   docker_check
   Service_Prometheus
   if [ -z ${monitoring} ];then
      info6 "请重新输入"  
      info5  
      server_run
   else
      case ${monitoring} in 
        '1')
            #Prometheus
            echo ""
            sh ${bashpath}/monitor/start_prometheus.sh;;
        '2')
          #grafana
          echo ""
          sh ${bashpath}/monitor/start_grafana.sh;;
         '3')
          #cadvisor
         echo ""
          sh ${bashpath}/monitor/start_cadvisor.sh;; 
         '4')
         #node_export
          echo ""
           sh ${bashpath}/monitor/start_node_export.sh;;
          '5')
           #pushgateway
           echo ""
           sh ${bashpath}/monitor/start_pushgateway.sh;;
         'h')
           #help
           echo ""
           monitoring_help;;    
         'q')
        echo ""
         exit 0;;               
        esac
  fi
}
#数据库服务
database_server_run(){
    echo ""
    docker_check
    Service_database
    if [ -z ${database} ];then
       info6 "请重新输入"    
       info5
       server_run
     else
         case ${database} in 
             '1')
                  #Mysql
                  start_mysql;;
             '2')
                  Service_database_redis
                    if [ -z ${database_redis} ];then
                       info6 "请重新输入"    
                       info5
                       server_run
                     else
                         case ${database_redis} in 
                            '1')
                                echo ""
                                start_redis ;;
                            '2')
                                echo ""
                                info8 "未完成"
                                info3
                                database_server_run;;
                            'h')
                                echo ""
                                info6 "未完成";;
                            'q')
                                echo ""
                                exit 0;;
                          esac
                      fi;;            
              'h')
                   database_help
                   database_server_run;;
              'q')
                   echo ""
                   exit 0;;               
           esac
      fi
}
#harbor服务
harbor_server_run(){
   #Harbor
   echo ""
   docker_check
   Harbor_SERVICE
   if [ -z ${harbor_Service} ];then
      info6 "请重新输入"    
      info5
      server_run
   else
      case ${harbor_Service} in 
         '1')
           #Mysql
              start_harbor install;;
         '2')
              start_harbor_check;;
         '3')
              info6 "尚未完成"
              start_harbor_check;;
         'h')
              harbor_help;;
         'q')
             echo ""
             exit 0;;              
         esac
 fi
}
#3、常见服务部署
server_run(){
   network_check
   Service_deployment
        if [ -z ${Service} ];then
            info6 "请重新输入"    
            info5
            run
        else
             case ${Service} in
              '1')
              #docker基础环境
              echo ""
                  start_docker;;
              '2')
              #监控服务(prometheus、zabbix)及其组件
                 monitor_server_run;; 
              '3')
              #数据库服务
                  database_server_run ;; 
              '4')
              #harbor服务
                 harbor_server_run;; 
              'q')
                  echo ""
                  exit 0;;
           esac
         fi
}
#4.常用脚本使用
used_script_run(){
   network_check
   Commonly_used_script
   if [ -z ${script} ];then
            info6 "请重新输入"
            info5    
               run
        else
             case ${script} in
              '1')
              #docker基础环境
              echo ""
              rpm_download_run;;
              '2')
              #
               sh ${bashpath}/script/harbor_ssl.sh;;
              '3')
              #echo ""
                run_set_system;;
              '4')
                Clean_up_system_login;;
              '5')
                Count_the_number;;
              '6')
                Count_number_documents;;
              'h')
               script_help;;
              'q')
                  echo ""
                  exit 0;;
           esac
         fi
}
#6.基础环境检查
env_config_peizhi(){
   network_check
   env_config
   if [ -z ${env_script} ];then
            info6 "请重新输入"
            info5    
               run
        else
             case ${env_script} in
              '1')
              #docker基础环境
              echo ""
                 run_set_system;;
              '2')
                 install_chronyd_server;;
              '3')
                 install_chronyd_client;;
              '4')
                 check_system_run;;
              '5')
                 check_k8s_docker_run;;
              '6')
                 start_harbor_check;;
              'h')
               env_help
               info5
               env_config_peizhi;;
              'q')
                  echo ""
                  exit 0;;
           esac
         fi
}
#7.中间件服务
middleware_server_run(){
   docker_check
   middleware_server
   if [ -z ${middleware} ];then
      info6 "请重新输入"  
      info5  
      middleware_server_run
   else
      case ${middleware} in 
        '1')
            #start_zk
            start_zk;;
         'h')
           #help
           echo ""
           monitoring_help;;    
         'q')
        echo ""
         exit 0;;               
        esac
  fi
}
#构建基础镜像
basi_build_run(){
   docker_check
   basi_build
   if [ -z ${basi_build_num} ];then
      info6 "请重新输入"  
      info5  
      basi_build_run
   else
      case ${basi_build_num} in 
        '1')
            echo ""
            sh ${bashpath}/script/build_kafka.sh  ;;
                     
         'h')
           #help
           echo ""
           basi_build_help;;    
         'q')
        echo ""
         exit 0;;               
        esac
  fi
}



################################################################################
#                                                                              #
#                                   yum源                                      #
#                                                                              #
################################################################################
#yum源
aliyun_yum(){
 echo ""
 info "官方网站下载最新版(CentOS7)"
  ls /etc/yum.repos.d/*.repo
 if [ $? -eq 0 ];then
   [ -d /etc/yum.repos.d/bak ] || mkdir /etc/yum.repos.d/bak
    mv /etc/yum.repos.d/*.repo /etc/yum.repos.d/bak/ 
 fi
 if [ `rpm -qa|grep ^wget|wc -l` -eq 1 ];then
        wget -O  /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo &>/dev/null
    else
       curl  http://mirrors.aliyun.com/repo/Centos-7.repo -o /etc/yum.repos.d/CentOS-Base.repo
 fi

 yum makecache >/dev/null
 [ $? -eq 0 ] && info "Aliyun yum 源加载成功"
}
tenxun_yum(){
   echo ""
 info "官方网站下载最新版(CentOS7)"
 ls /etc/yum.repos.d/*.repo
 if [ $? -eq 0 ];then
   [ -d /etc/yum.repos.d/bak ] || mkdir /etc/yum.repos.d/bak
    mv /etc/yum.repos.d/*.repo /etc/yum.repos.d/bak/ 
 fi

  if [ `rpm -qa|grep ^wget|wc -l` -eq 1 ];then
      #base源
      wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.cloud.tencent.com/repo/centos7_base.repo &>/dev/null
      #epel源
      wget -O /etc/yum.repos.d/epel.repo http://mirrors.cloud.tencent.com/repo/epel-7.repo >/dev/null
      #参考文档 http://docs.kubernetes.org.cn/457.html,官方网址国内 无法访问,使用腾讯云
    else
       curl   http://mirrors.cloud.tencent.com/repo/centos7_base.repo -o /etc/yum.repos.d/CentOS-Base.repo
       curl http://mirrors.cloud.tencent.com/repo/epel-7.repo -o  /etc/yum.repos.d/epel.repo
 fi
 yum makecache >/dev/null
 [ $? -eq 0 ] && info "腾讯 yum 源加载成功"
}
wangyiyun(){
 echo ""
 info "官方网站下载最新版(CentOS7)"
 ls /etc/yum.repos.d/*.repo
 if [ $? -eq 0 ];then
   [ -d /etc/yum.repos.d/bak ] || mkdir /etc/yum.repos.d/bak
    mv /etc/yum.repos.d/*.repo /etc/yum.repos.d/bak/ 
 fi
  if [ `rpm -qa|grep ^wget|wc -l` -eq 1 ];then
          wget -O /etc/yum.repos.d/CentOS-Base.repo  http://mirrors.163.com/.help/CentOS6-Base-163.repo  &>/dev/null
    else
       curl  http://mirrors.163.com/.help/CentOS6-Base-163.repo -o /etc/yum.repos.d/CentOS-Base.repo
 fi
 yum makecache  >/dev/null
 [ $? -eq 0 ] && info "网易 yum 源加载成功"
}
################################################################################
#5、Yum仓库安装
Service_yum_run(){
 Service_yum_repoistory1
 if [ -z ${yum_repoistory1} ];then
          info6 "请重新输入"    
          info5
          run
    else
      case ${yum_repoistory1} in
         '1')
            yum repolist  
            #run_process 10 1
            ;;
         '2')
            yum makecache;;
         '3')
            network_check
            Service_yum_repoistory
             if [ -z ${yum_repoistory} ];then
                info6 "请重新输入"    
                info5
                  Service_yum_run
                else
                  case ${yum_repoistory} in
                    '1')
                           aliyun_yum;;
                    '2')
                           tenxun_yum;;
                    '3')
                           wangyiyun;;
                    'h')
                        echo ""
                        env_help

                        info5
                        env_config_peizhi;;
                     'q')
                         echo ""
                  exit 0;;
           esac
         fi ;;
         'q')
            echo ""
            exit 0;;
   esac
 fi
}
################################################################################
#                                                                              #
#                               启动面板                                       #
#                                                                              #
################################################################################
index_run(){
 info3
 echo -e "                           CentOS7 系统菜单   "
 info3
 echo  "                          1、系统资源查看" 
 echo  "                          2、网卡实时流量"
 echo  "                          3、常见服务部署"
 echo  -e "\033[36m                          4、自定义脚本\033[0m"
 echo  "                          5、Yum仓库配置"
 echo  "                          6、基础环境配置"
 echo  -e "\033[35m                          7、中间件服务\033[0m"
  echo  -e "\033[34m                          8、docker镜像构建\033[0m"
 info3 
 echo  "h【帮助】                                                         Enter【主页面】" 
 echo  "q【退出】                                                         Enter【主页面】" 
 info3
 read  -n1 -p "请输入对应的数字编号:" check
}
#1、系统资源查看面板
System_resources(){
   echo ""
   echo "请选择你要查看的系统资源:"
   echo "1) CPU"
   echo "2) 磁盘"
   echo "3) 内存"
   echo "4) 网卡"
   echo "5) 服务器"
   echo "6) ALL"
 info3
  echo  "h【帮助】                                                         Enter【主页面】" 
 echo  "q【退出】                                                         Enter【主页面】" 
 read  -n1 -p "请输入对应的数字编号:" system
}
#二级面板,常见服务部署
Service_deployment(){
   echo ""
   echo -e "\033[36m 个人原因:喜欢使用docker去部署相应的服务,所以该脚本上的服务大多基于docker环境使用的 \033[0m " 
   echo "请选择你要部署服务:"
   echo "1) docker基础环境"
   echo "2) 监控服务(prometheus、zabbix)及其组件"
   echo "3) 数据库服务"
   echo "4) Harbor"
   info3
 echo  "h【帮助】                                                         Enter【主页面】" 
 echo  "q【退出】                                                         Enter【主页面】" 
 read  -n1 -p "请输入对应的数字编号:" Service
}
#
Harbor_SERVICE(){
   echo -e "\033[36m 个人原因:喜欢使用docker去部署相应的服务,所以该脚本上的服务大多基于docker环境使用的 \033[0m " 
   echo "请选择你要部署的方式:"
   echo "1) http install"
   echo "2) http check "
   echo "3) https(未完成)"
   info3
 echo  "q【退出】                                                         Enter【主页面】" 
 read  -n1 -p "请输入对应的数字编号:" harbor_Service
}
#三级监控服务(prometheus、zabbix)及其组件面板
Service_Prometheus(){
   echo ""
   info5
   echo "请选择你要部署服务:"
   echo "1) Prometheus"
   echo "2) Grafana"
   echo "3) cadvisor"
   echo "4) node_export"
   echo "5) Pushgateway" 
   echo "h) 帮助信息" 
 info3
 echo  "q【退出】                                                         Enter【主页面】" 

 read  -n1 -p "请输入对应的数字编号:" monitoring
}
#三级数据库服务()及其组件面板
Service_database(){
   echo ""
   info5
   echo "请选择你要部署服务:"
   echo "1) Mysql"
   echo "2) redis"
   echo "3) mongo"
   echo "4) Oracle"
   echo "5) RabbitMQ" 
 info3
 echo  "h【帮助】                                                         Enter【主页面】" 
 echo  "q【退出】                                                         Enter【主页面】" 
 read -n1  -p "请输入对应的数字编号:" database
}
Service_database_redis(){
   echo ""
   info5
   echo "请选择你要部署服务:"
   echo "1) redis(单机)"
   echo "2) redis(集群)"
   echo "h) 帮助信息" 
 info3
 echo  "h【帮助】                                                         Enter【主页面】" 
 echo  "q【退出】                                                         Enter【主页面】" 
 read -n1 -p "请输入对应的数字编号:" database_redis
}


#三级面板,yum常见服务部署
Service_yum_repoistory1(){
   echo ""
   info5
   info4 "yum源配置" 
   echo "请选择你要部署服务:"
   echo "1) 检查yum源仓库"
   echo "2) 重新加载yum源仓库"
   echo "3) 配置yum源仓库"
   info3
 echo  "h【帮助】                                                         Enter【主页面】" 
 echo  "q【退出】                                                         Enter【主页面】" 
 read  -n1 -p "请输入对应的数字编号:" yum_repoistory1
}
#二级面板,常见服务部署
Service_yum_repoistory(){
   echo ""
   echo -e "\033[32m 建议使用阿里源\033[0m " 
   echo "请选择你要部署服务:"
   echo "1) 阿里源"
   echo "2) 腾讯源"
   echo "3) 网易yum源"
   info3
 echo  "h【帮助】                                                         Enter【主页面】" 
 echo  "q【退出】                                                         Enter【主页面】" 
 read  -n1 -p "请输入对应的数字编号:" yum_repoistory
}
#二级面板、常用脚本使用
Commonly_used_script(){
   echo ""
   info5
   echo "请选择你要使用的脚本:"
   echo "1) rpm下载"
   echo "2) harbor证书生成脚本"
   echo -e "3)\033[34m 初始化服务器配置\033[0m"
   echo -e "4)\033[31m 清理系统登录信息\033[0m"
   echo "5) 统计当前系统中可以登录计算机的账户有多少个" 
   echo "6) 统计/var/log 有多少个文件,并显示这些文件名"
 info3
 echo  "h【帮助】                                                         Enter【主页面】" 
 echo  "q【退出】                                                         Enter【主页面】" 
 read  -n1 -p "请输入对应的数字编号:" script   
}
#基础环境配置
env_config(){
   echo ""
   info5
   echo "请选择你要使用的脚本:"
   echo -e "1)\033[91m 初始化服务器配置\033[0m"
   echo "2) chronyd时间同步服务端"
   echo "3) chronyd时间同步客户端"
   echo "4) 基础环境检查"
   echo "5) k8s/docker环境检查"
   echo "6) harbor服务检查及服务重新操作"
    info3
 echo  "h【帮助】                                                         Enter【主页面】" 
 echo  "q【退出】                                                         Enter【主页面】" 
 read  -n1 -p "请输入对应的数字编号:" env_script   
}
#中间件服务
middleware_server(){
   echo ""
   info5
   echo "请选择你要部署服务:"
   echo "1) zookeeper"
   echo "2) kafka"
 info3
 echo  "h【帮助】                                                         Enter【主页面】" 
 echo  "q【退出】                                                         Enter【主页面】" 
 read -n1  -p "请输入对应的数字编号:" middleware
}
#8、镜像构建
basi_build(){
   echo ""
   info5
   echo "请选择你要构建的镜像:"
   echo "1) kafka"
   info3
   echo  "h【帮助】                                                         Enter【主页面】" 
   echo  "q【退出】                                                         Enter【主页面】" 
 read -n1  -p "请输入对应的数字编号:" basi_build_num
}
################################################################################
#                                                                              #
#                               帮助信息                                       #
#                                                                              #
################################################################################
help(){
   echo ""
 info5
 info7 "脚本注解:"
 info8 "该脚本整合了本人学习脚本过程中所写的脚本,以及网上开源的脚本"
 info8 "结合统一的启动门户($0),实现统一的管理,不过内容添加的越多,越觉得脚本冗余性太复杂"
 info8 "执行方式:"
 info "sh $0"
 info8 "根据屏幕上的输出信息, 进行填写即可"   
 info5
}
script_help(){
   echo ""
   info5
   info4 "帮助信息"
   info3
   info7 "1) rpm下载脚本,通过页面上的提示进行选择性的下载指定的安装包,并且存放到执行的路径下"
   info6 "注意: 1.默认路径是: /opt/rpm"
   info6 "      2.下载多个安装包时: 只需要在填写包名时,以空格为分隔符即可"
   info3
   info7 "2) harbor证书生成脚本,脚本未集成至$0脚本中,调用harbor_ssl.sh脚本执行"
   info6 "注意: 1.脚本生成的证书,在ssl目录下把certs.d目录打包成certs_d.tar.gz,复制其他docker客户端使用"
   info6 "      2.复制到docker客户端的/etc/docker/目录下"
   info6 "      3.执行tar -xvf registry.harbor.cn.tar.gz,解压到当前路径"
   info6 "      4.在daemon.json文件中添加\"insecure-registries\": [\"registry.harbor.cn\"]"
   info6 "其中,服务使用的证书也在此目录下,需要根据实际情况,修改对应的harbor.yml文件,重启harbor服务即可实现https登录harbor"
   info3
   info7 "3) 初始化服务器配置,是因为每次新装一台linux服务器后,都需要做一些基础的操作,例如"
   info6 "selinux、firewalld、ntp时间同步、文件描述的限制、基础安装包(vim、bash-completion...)"
   info6 "注意: 1.可以配合主页面\"基础环境检查\"进行查看配置是否生效"
   info6 "      2.selinux、内核参数的限制需要重启服务器后生效"
   info6 "      3.设置的主机名需要重新打开一次终端,或者直接在命令行中输入:\"bash\""

info5
used_script_run
}

basi_build_help(){
   source ${bashpath}/conf/conf.conf
   echo ""
   info5
   info4 "帮助信息"
   info3
   info7 "1) kafka"
   info6 "kafka镜像构建依赖于jdk的环境,所以需要提前准备好jdk的安装包(${basic_pkg})"
   info6 "需要提前确认好jdk的版本,如果版本如默认的不一致,则需要修改对应的Dockerfile"
   info6 "把下载好的安装包,存放在当前机器上的一个目录下即可(手动)"
   info7 "kafka的版本则是根据kafka的安装包而定的,也是需要手动下载,与jdk安装包放置在同一目录下"

   info5
   basi_build_run
}

#输出日志
rpm_log(){
 info2 "使用本脚本时,需要链接外网"
 info2 "请检查网络的连接"
 info2 "后面的路径可以是相对路径,或者绝对路径"
}
iostat_log_run(){
  info4 "cpu属性值说明"
  info2 "%user:CPU处在用户模式下的时间百分比"
  info2 "%nice:CPU处在带NICE值的用户模式下的时间百分比"
  info2 "%system:CPU处在系统模式下的时间百分比"
  info2 "%iowait:CPU等待输入输出完成时间的百分比"
  info2 "%steal:管理程序维护另一个虚拟处理器时,虚拟CPU的无意识等待时间百分比"
  info2 "%idle:CPU空闲时间百分比"
  info3 
  info4 "Device属性值说明"
  info2 "tps:该设备每秒的传输次数"
  info2 "kB_read/s:每秒从设备(drive expressed)读取的数据量"
  info2 "kB_wrtn/s:每秒向设备(drive expressed)写入的数据量"
  info2 "kB_read:  读取的总数据量"
  info2 "kB_wrtn:写入的总数量数据量"
}
#监控信息监控帮助信息
monitoring_help(){
   info3
   info4 "选项帮助信息"
   info6 "1)Prometheus"
   info2 "Prometheus,因配置文件外置,需要根据实际情况编写,当前尚未自动化维护配置文件,所以需要手动需要手动修改"
   info2 "prometheus.yml文件存放路径是:${bashpath}/monitor/prometheus.yml"
   info3 "2)Grafana"
   info2 "Grafana数据可视化展示,把Prometheus对接的采集"
}
#harbor
harbor_help(){
   info4 "harbor信息帮助"
}
env_help(){
   info3
   info4 "选项帮助信息"
   info6 "1)初始化服务器配置"
   info7 "\033[31m 初次装机时进行的相应基础的配置033\0m(ssh超时时间、安装基础安装包、设置主机名、修改时区、统内核优化等)"
   info3
   info6 "2) chronyd时间同步服务端"
   info2 "CentOS7上部署chronyd时间同步服务,且指定外网地址(阿里云时间同步服务器)"
   info2 "可通过: chronyc sources -v进行检查时间"
   info6 "3) chronyd时间同步客户端"
   info2 "CentOS7上部署chronyd时间同步服务,且指定外网地址(阿里云时间同步服务器)"
   info2 "可通过: chronyc sources -v进行检查时间"
   info3
   info6 "4) 基础环境检查"
   info2 "检查上面的初始化服务配置是否成功"
}
database_help(){
   info3
   info4 "选项帮助信息"
   info6 "1)mysql"
   info7 "需要安装docker环境且网络状态良好"
   info3
   info6 "2) redis"
   info2 "需要安装docker环境且网络状态良好"

   info6 "3) Oracle"
   info2 "需要安装docker环境且网络状态良好"
   info3
   info6 "4) RabbitMQ"
   info2 "需要安装docker环境且网络状态良好"
}

################################################################################
#                                                                              #
#                          启动方式,第一主页面                                 #
#                                                                              #
################################################################################
#启动方式,第一主页面
run(){
 index_run
 if [ -z ${check} ];then
      info6 "请重新输入"    
      run
   else
   case $check in
     '1')
       system_run;;
      #sh script/check.sh ;;
     '2') 
         traffic_run ;;
     '3')
        server_run ;;
     '4')
         used_script_run;;
     '5')
         Service_yum_run;;
      '6') 
         env_config_peizhi;;
      '7')
         middleware_server_run;;
      '8')
         basi_build_run;;
     'h')
         help
         index_run;;
     'q')
         echo ""
         exit 0 ;;
    esac
 fi
}
############################################################################
run