• shigen的一些shell脚本分享


    shigen日更文章的博客写手,擅长Java、python、vue、shell等编程语言和各种应用程序、脚本的开发。记录成长,分享认知,留住感动。

    最近遇到了项目的基础服务老是挂掉了,决定用shell脚本去治理一下。于是,我也看到了我在去年学习的shell脚本的笔记和实战的案例,很多都是shigen自己写的,在这里分享给大家,希望能带大家巩固基础,提供对于效率脚本的参考。

    🧑‍💻🧑‍💻注意:

    1. 以上的脚本适用于:centos7系列、macos系列
    2. 统一约定shell的脚本解释器为bash

    从基础开始

    如何在控制台输出一句话,让脚本暂停

    echo '开始.....'
    sleep 10
    echo '结束.....'
    
    • 1
    • 2
    • 3

    输出服务器时间

    输出的时间已经格式化成:yyMMdd-HHMMSS

    #!/bin/bash
    
    echo "current time; `date +%y%m%d-%H%M%S`"
    
    • 1
    • 2
    • 3

    生成1-10的序列

    # !/bin/bash
    time
    for i in {1..10}
    do
      str1=`seq -s ":" 10`
      echo "${str1}"
    done  
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    shell函数

    # !/bin/bash
    
    shigen(){
      echo "nice to mett you"
    }
    
    shigen
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    特殊参数变量

    #!/bin/bash
    
    # $0 获得脚本文件名以及脚本路径
    # $n 获得脚本的第n个参数
    # $# 获得参数总个数
    # $* 脚本的所有参数
    # $@ 所有参数独立成字符串
    
    echo "shell name: $0"
    for var in "$@"
    do
      echo "$var"
    done
    echo "shell args: $* shell args len: $#"  
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    特殊状态变量

    # !/bin/bash
    
    echo "current id: $$"
    echo "last id: $!"
    
    # 参数个数不为2,返回119
    [ $# -ne 2 ] && {
      echo "must have two args"
      exit 119
    }
    echo "no problem"
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    1-100的和

    #!/bin/bash
    
    sum=0
    i=1
    until [ $i -gt 100 ]; do
      sum=$(($sum + $i))
      let i++
    done
    
    echo "sum: $sum"
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    实战

    jenkis自动化部署java服务脚本

    #!/bin/bash
    # jenkins shell script to deploy the java project
    
    echo '------start deployment--------'
    echo "java -version && mvn -version"
    
    mvn clean install -DskipTests
    
    DATE="$(date +%y%m%d-%H%M%S)"
    APP_NAME="wx-develop"
    APP_PORT="8088"
    HARBOR_DOMIAN="xx.xx.xx.xx"
    
    TAG="$APP_NAME:$DATE"
    docker build -t $TAG -f Dockerfile .
    
    docker login $HARBOR_DOMIAN
    
    NEW_TAG="$HARBOR_DOMIAN/test/$TAG"
    docker tag $TAG $NEW_TAG
    docker push $NEW_TAG
    echo "$TAG uploaded successfully"
    
    docker run -d --name $APP_NAME-$DATE -p $APP_PORT:$APP_PORT $NEW_TAG
    
    echo "Successfully started"
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26

    一键安装jdk8

    #!/bin/bash
    
    jdk_install() {
      # 1. 下载对应的压缩包
      yum install -y wget
      wget -nc https://repo.huaweicloud.com/java/jdk/8u181-b13/jdk-8u181-linux-x64.tar.gz
      echo "jdk package installed"
      # 2. 创建安装目录
      mkdir /usr/local/java/
      # 解压到新建目录
      tar -zxvf jdk-8u181-linux-x64.tar.gz -C /usr/local/java/
      # 3. 配置写入文件
      cat >> /etc/profile << "EOF"
      ========jdk env config=========
      export JAVA_HOME=/usr/local/java/jdk1.8.0_181
      export JRE_HOME=${JAVA_HOME}/jre
      export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
      export PATH=${JAVA_HOME}/bin:$PATH
      EOF
    
      # 4. 使环境变量生效
      source /etc/profile
      java -version && javac -version
      if [ $? -ne 0 ]; then
        echo "jdk installed failed"
        exit 1
      else
        jdk_home=$(whereis java)
        echo "jdk installed successfully, now enjoy, jdk_home: $jdk_home"
      fi
    }
    
    jdk_install
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34

    一键化系统监控

    #!/bin/bash
    
    LOG_BASE_PATH=/var/log/server-status
    CURRENT_DATE=$(date "+%Y-%m-%d")
    
    get_server_status() {
      CURRENT_TIME=$(date "+%Y-%m-%d %H:%M:%S")
      IP_ADDR=$(ifconfig eth0 | awk -F ' ' 'NR==2{print $2}')
      DISK_INFO=$(df -h | grep '^/dev/' | awk '{print $3, $5}')
      MEM_INFO=$(free -h | awk 'NR==2{print $NF}')
    
      DOCKER_SERVER=$(docker ps | awk 'NR!=1,NF==NF{print $NF}' | wc -l)
      if [ $DOCKER_SERVER -ne 2 ]; then
        CONCLUSION="docker自定义服务未启动"
      else
        CONCLUSION="docker自定义服务运行正常"
      fi
      # 创建日志文件
      if [ ! -d $LOG_BASE_PATH ]; then
        mkdir -p $LOG_BASE_PATH
      fi
    
      [ ! -f $LOG_BASE_PATH ] && touch $LOG_BASE_PATH || echo $LOG_BASE_PATH
      echo "统计时间: $CURRENT_TIME" >>$LOG_BASE_PATH
      echo "机器ip: $IP_ADDR" >>$LOG_BASE_PATH
      echo "磁盘情况: $DISK_INFO" >>$LOG_BASE_PATH
      echo "内存情况: $MEM_INFO" >>$LOG_BASE_PATH
      echo "docker服务: $CONCLUSION" >>$LOG_BASE_PATH
    }
    
    mail() {
      get_server_status
      cat $LOG_BASE_PATH
    }
    
    mail
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36

    希望以上shigen积累和用到的脚本能给大家带来帮助,当然只是一部分,还有其他的很多效率脚本来不及整理和分享。正如我的一个运维伙伴所说:具体的脚本还得看业务情况。

    欢迎伙伴们也分享自己的脚本,或者需要的脚本。


    以上就是今天分享的全部内容了,觉得不错的话,记得点赞 在看 关注支持一下哈,您的鼓励和支持将是shigen坚持日更的动力。同时,shigen在多个平台都有文章的同步,也可以同步的浏览和订阅:

    平台账号链接
    CSDNshigen01shigen的CSDN主页
    知乎gen-2019shigen的知乎主页
    掘金shigen01shigen的掘金主页
    腾讯云开发者社区shigenshigen的腾讯云开发者社区主页
    微信公众平台shigen公众号名:shigen

    shigen一起,每天不一样!

  • 相关阅读:
    Spring核心思想
    本博客IDL 学习目录
    k8s 1.28安装
    学习Java编程知识 必知要点
    Go Mac配置Air热加载
    【突然想多了解一点】可以用 Task.Run() 将同步方法包装为异步方法吗?
    基于Python的农业统计数据可视化系统设计与实现
    2022华为中央媒体技术院AI算法工程师FindStar一面+二面+主管面
    “蔚来杯“2022牛客暑期多校训练营6
    WebUI自动化必备技能-HTML和css知识详解
  • 原文地址:https://blog.csdn.net/weixin_55768452/article/details/134258534