• 60天shell脚本计划-11/12-渐入佳境


    --作者:飞翔的小胖猪

    --创建时间:2021年3月18日

    --修改时间:2021年3月22日

    说明

     每日上传更新一个shell脚本,周期为60天。如有需求的读者可根据自己实际情况选用合适的脚本,也可在评论区留言提出脚本需求,作者会尽快根据需求编写相关脚本对功能进行实现。

     每篇文章包含5个脚本。

    总进度:11/12

    上一篇脚本链接:https://www.cnblogs.com/Pigs-Will-Fly/p/14539999.html

    下一篇脚本链接:https://www.cnblogs.com/Pigs-Will-Fly/p/14706885.html

    主要内容

    21年3月18日-批量启动容器脚本

    ************************************************************************************************************************************************************************************************************************************

    脚本说明

    获取到当前系统中没有启动容器,批量启动docker容器。

    文件说明

    startup_docker_container.sh:脚本主体文件

    脚本主体

    [root@135 51_startup_docker_container]# cat startup_docker_container.sh 
    #!/bin/bash
    show_container_list(){
      #获取当前系统中不是已经退出的容器,两条语句任选其一。
      container_list=`docker container ls -a | awk '/Exited/{print $1}'`
      #container_list=`docker container ls -a | awk '/Exited/{print $NF}'`
    
      #echo "${container_list}"
    }
    
    #启动容器
    startup_container(){
      echo  -e "
    e[35m待启动的容器id清单:e[34m"
      echo "${container_list}"
      echo -e "e[0m"
      echo -e "e[35m启动容器....................................e[0m"
      for i in ${container_list}
      do
        echo -e "e[33m处理${i}容器。e[0m"
        if docker container start ${i} &>/dev/null;then
          echo -e "e[32m容器 ${i} 启动命令执行成功。e[0m
    "
        else
          echo -e "e[31m容器 ${i} 启动命令执行失败。e[0m
    "
        fi
      done
    }
    
    #检查容器是否运行正常
    check_status(){
      echo -e "
    e[35m检测容器....................................e[0m"
      for i in ${container_list}
      do
        echo -e "e[33m检查${i}容器。e[0m"
        docker_name=`docker container ls -a | grep -i ${i}|awk '{print $NF}'`
        docker container ls | grep -i ${i} &>/dev/null
        if [ $? -eq 0 ];then
          echo -e "e[32m容器 ${docker_name} 启动成功,id为:${i} e[0m
    "
        else
          echo -e "e[31m容器 ${docker_name} 启动失败,id为:${i} e[0m
    "
        fi
      done
    }
    
    #定义主函数
    main(){
      show_container_list
      startup_container
      echo -e "e[33m等10秒再检测容器状态,如果10秒还存在则表示启动成功...................e[0m"
      sleep 10
      check_status
    }
    
    #调用主函数
    main

    结果

    **************************************************************************************************************2021年3月18日脚本结束*****************************************************************************************************************

    21年3月19日-容器停止脚本

    ************************************************************************************************************************************************************************************************************************************

    脚本说明

    获取到当前系统中没有启动容器,批量启动docker容器。

    文件说明

    stop__rm_docker_container.sh:脚本主体文件

    脚本主体

    [root@135 52_stop__rm_docker_container]# cat stop__rm_docker_container.sh 
    #!/bin/bash
    #展示系统中所有container,包括没有启动的
    show_container_list(){
      #获取当前系统中正在运行的容器。
      #container_list=`docker container ls  | awk 'NR>1{print $1}'`
      container_list=`docker container ls | awk 'NR>1{print $NF}'`
    
      #echo "${container_list}"
    }
    
    
    
    #启动容器
    stop_container(){
      echo  -e "
    e[35m待停止容器id清单:e[34m"
      echo "${container_list}"
      echo -e "e[0m"
      echo -e "e[35m停止容器....................................e[0m"
      for i in ${container_list}
      do
        echo -e "e[33m处理${i}容器。e[0m"
        #手动让用户确认是否停止该容器
        read -p "Please choose to stop or not container(default values n), y/n: " reply
        answer_u=${reply:-n}
        if [ ${answer_u} == "y" ];then
          if docker container stop ${i} &>/dev/null;then
            echo -e "e[32m容器 ${i} 停止命令执行成功。e[0m
    "
          else
            echo -e "e[31m容器 ${i} 停止命令执行失败。e[0m
    "
          fi
        else
          echo -e "e[33m不执行容器${i}停止操作。e[0m
    "
        fi
      done
    }
    
    #定义主函数
    main(){
      show_container_list
      stop_container
    }
    
    #调用主函数
    main

    结果

    **************************************************************************************************************2021年3月19日脚本结束*****************************************************************************************************************

    21年3月20日-日志输出装饰脚本

    ************************************************************************************************************************************************************************************************************************************

    脚本说明

    定义shell脚本中日志各等级日志输入格式颜色。

    文件说明

    shell_decorator.sh:脚本主体文件

    脚本主体

    [root@135 53_shell_decorator]# cat shell_decorator.sh 
    #!/bin/bash
    #表示有错误及退出
    set -o errexit
    set -o pipefail
    
    
    # 定义错误级别的输出格式为红色
    log::err() {
      printf "[$(date +'%Y-%m-%dT%H:%M:%S')]: 33[31mERROR: 33[0m$@
    "
    }
    
    # 定义消息级别的输入格式为绿色
    log::info() {
      printf "[$(date +'%Y-%m-%dT%H:%M:%S')]: 33[32mINFO: 33[0m$@
    "
    }
    
    # 定义告警等级的输入格式为黄色
    log::warn() {
      printf "[$(date +'%Y-%m-%dT%H:%M:%S')]: 33[33mWARNING: 33[0m$@
    "
    }
    
    #定义主函数
    main(){
      log::info "This info level message"
      log::warn "This warn level message"
      log::err  "This errorlevel message"
    }
    
    #调用主函数
    main

    结果

    **************************************************************************************************************2021年3月20日脚本结束*****************************************************************************************************************

    21年3月21日-容器信息展示脚本

    ************************************************************************************************************************************************************************************************************************************

    脚本说明

    获取系统中的容器信息,展示容器名、网络模式、使用文件大小、容器总大小。

    文件说明

    display_docker_info.sh:脚本主体文件

    脚本主体

    [root@135 54_docker_info]# cat display_docker_info.sh 
    #/bin/bash
    #获取docker各个容器id,必须第一个执行
    get_docker_id(){
      #获取dockerid
      docker_id=`docker container ls  -q`
    }
    
    #获取docker名及网络模式、文件大小、容器大小
    get_docker_info(){
      input_id=$1
      docker_name=`docker ps | awk '/'$input_id'/{print  $NF}'`
      docker_network_type=`docker inspect  $input_id  -f {{.NetworkSettings.Networks}} | sed 's/map[//g' | awk -F':' '{print $1}'`
      docker_size=`docker ps -s| awk '/'$input_id'/{print $NF}' |sed 's/)//g'`
      file_size=`docker ps -s| awk '/'$input_id'/{print $(NF-2)}'`
      #echo -e "e[34mDocker id $1 name : e[33m ${docker_name:-null} e[0m"
    }
    
    #获取网络模式
    get_docker_ip(){
      input_id=$1
      input_network=$2
      case $2 in
        "none")
         docker_ip='127.0.0.1'
         ;;
        "host")
         docker_ip='Physical_machine_IP'
         ;;
        "bridge")
         docker_ip=`docker inspect  ${input_id}  -f {{.NetworkSettings.IPAddress}}`
        ;;
        *)
        docker_ip='unknown'
        ;;
      esac
    }
    
    #定义主函数
    main(){
      get_docker_id
      echo -ne "e[34m"
      printf "%-20s %-25s %-20s %-15s %-15s %-15s
    " docker_id docker_name network_type file_size docker_size docker_ip
      echo -ne "e[m"
         
      for i in `echo $docker_id`
      do
        get_docker_info $i
        get_docker_ip $i $docker_network_type
        printf "%-20s %-25s %-20s %-15s %-15s %-15s
    " $i $docker_name $docker_network_type $file_size $docker_size $docker_ip
      done
      echo  ""
    }
    
    #调用主函数
    main

    结果

    **************************************************************************************************************2021年3月21日脚本结束*****************************************************************************************************************

    21年3月22日-多线程并发简易版脚本

    ************************************************************************************************************************************************************************************************************************************

    脚本说明

    使用linux系统中的&参数模拟多线程输出。

    文件说明

    multithreading.sh:脚本主体文件

    脚本主体

    [root@135 55_multithreading]# cat multithreading.sh 
    #!/bin/bash
    #定义一个函数输出数字函数1
    echo_number_1(){
      let a=0
      while [ $a -lt 10 ]
      do
        echo -e "e[31m 1111 e[0m"
        sleep 0.2
        let a=$a+1
      done
    }
    
    #定义一个函数输出数字函数2
    echo_number_2(){
      let b=0
      while [ $b -lt 10 ]
      do
        echo -e "e[31m 2222 e[0m"
        sleep 0.2
        let b=$b+1
      done
    }
    
    #定义一个函数输出数字函数3
    echo_number_3(){
      let c=0
      while [ $c -lt 10 ]
      do
        echo -e "e[31m 3333 e[0m"
        sleep 0.2
        let c=$c+1
      done
    }
    
    #定义main函数
    main(){
      echo_number_1&
      echo_number_2&
      echo_number_3&
    }
    
    #调用主函数
    main

    结果

    **************************************************************************************************************2021年3月22日脚本结束*****************************************************************************************************************

  • 相关阅读:
    12-转盘
    11-UIView与核心动画对比
    10-动画组
    09-转场动画
    08-图片抖动(帧动画)
    07-心跳效果
    06-CABasicAnimation基础核心动画
    05-时钟效果
    计时器延迟 NSTimer和CADisplaylink GCD中的延迟
    ScrollView与UIPageController
  • 原文地址:https://www.cnblogs.com/Pigs-Will-Fly/p/14592317.html
Copyright © 2020-2023  润新知