Linux shell字符串操作

 

#!/bin/bash

#镜像名
image="asr-server"
#镜像版本
ver="5.2.1"
#容器名
dname="asr"

#资源目录配置
if [ $# -eq 1 ] ; then
    echo $1
    rfile=$1
else
    #资源文件路径
    rfile="/mnt/resource/test/server/resources"
fi

#日志目录解析
logfile="${rfile%/*}/log"
if [ ! -d $logfile ] ; then
    mkdir -p $logfile
fi

#环境检测
function check_environment
{
    #打印提示信息
    echo -e "start check environment ..."
    
    #设置最大文件描述符
    nfile=`ulimit -n`
    #知识点1:屏幕输入写法
    if [ $nfile -lt 102400 ] ; then
        cat >> /etc/security/limits.conf << EOF
* soft nofile 102400
* hard nofile 102400
EOF
    fi

    #校验docker是否安装
    docker images > /dev/null 2>&1
    if [ $? -ne 0 ];then
        echo "Please install docker first ."
        exit 0
    fi
    
    #打印提示信息
    echo -e "check environment successful ."
    
}

#备份资源文件
function backup
{
    #打印提示信息
    echo -e "start backup old resources ..."
    
    #校验资源文件是否存在
    if [ ! -d $rfile ] ; then
        echo "${rfile} not exist ."
        exit 0
    fi
    
    #按日期备份
    file_name=${rfile##*/}
    #知识点2:日期相关语法
    back_name="/tmp/${file_name}_$(date +%Y%m%d%H).tgz"
    #tar主要支持相对路径备份,如果要备份绝对路径需要使用 -P 选项
    tar -zcPf ${back_name} ${rfile}
    
    #清空资源目录下文件
    rm -rf "${rfile}/*"
    
    #打印提示信息
    echo -e "backup old resources successful ."
}

#镜像文件安装
function intasll
{
    #打印提示信息
    echo -e "start intasll ..."
    
    #停止旧容器
    container=$(docker ps|grep ${dname} | awk '{print $1}')
    for i in $container
    do
        docker stop $i
        docker rm $i
    done
    #打印提示信息
    echo -e "stop old container successful ."
    
    #备份资源文件
    backup

    #解压文件到临时目录
    tar -zxf ./resources/resources.tgz -C ./tmp

    #强制拷贝
    /usr/bin/cp -rf ./tmp/resources/* ${rfile}/
    
    #清理临时目录
    rm -rf ./tmp/*
    
    #获取当前镜像版本
    cur_image=`docker images | grep ${image} | awk '{print $2}'`
    
    #知识点3:注意字符串为空判断  "shell变量" 需要加双引号
    if [ -n "$cur_image" ] ; then
        for j in $cur_image
        do
            if [ "$j" = "$ver" ] ; then
                echo "${image}:${ver} already exist ."
                exit 0
            fi
        done
    fi
    
    #安装新镜像
    docker load -i "./server/${image}.tar"

    #启动容器
    docker run -p 50053:50053 -v $rfile:/home/asr/resources -v ${logfile}:/opt/asr/log -d --name ${dname} ${image}:${ver}
    
    #打印提示信息
    echo -e "start docker successful ."
}

check_environment
intasll

 

posted on 2019-11-27 22:28  寒魔影  阅读(836)  评论(0编辑  收藏  举报

导航