美文网首页
自动化流水线中执行自动化脚本程序

自动化流水线中执行自动化脚本程序

作者: 大唐雷恋 | 来源:发表于2019-07-05 16:12 被阅读0次

1.程序shell脚本的内容大致如下:

#! /bin/bash
#execute all scripts in specified directory
MYDATE=`date +%Y%m%d%H%M%S`
SQL_PATHS=(目录1 目录2 目录3 目录4) #按文件夹执行顺序写入脚本文件夹路径,根路径为当前shell脚本路径
LOG_FILE=${MYDATE}.log
LOG_FILE1=test.log
host=******
port=3306
user=root
confirm=
password=******

function read_dir() {
    count=0
    echo -e "=======================sql files in directory of $1 will be executed below=======================" >>${LOG_FILE}
    echo "=======================sql files in directory of $1 will be executed below======================="
    for file in `ls $1`
        do
            if [ -d $1"/"$file ]
                then 
                    read_dir $1"/"$file
            else
                let count++
                echo $count $1"/"$file
                echo -e $count $1"/"$file >>${LOG_FILE}
            fi
        done
    echo "=======================sql files in directory of $1 will be executed above======================="
    echo -e "=======================sql files in directory of $1 will be executed above=======================\n" >>${LOG_FILE}
}

function exec_sql() {
    for file in `ls $1`
        do
            if [ $file != "sys_data_pb_mix.sql" ]
                then
                if [ -d $1"/"$file ]
                    then 
                        exec_sql $1"/"$file
                else
                    mysql -h$host -P$port -u$user -p$password database_name --default-character-set=utf8 < $1"/"$file >& error.log
                    echo "=======================executed result in $1"/"$file======================="
                    echo -e "=======================executed result in $1"/"$file=======================" >>${LOG_FILE}
                    cat error.log >>${LOG_FILE} #输出执行日志
                    error=`grep ERROR error.log` #读取错误日志信息
                    if [ -n "$error" ] ; 
                        then #如果有错误就退出程序
                            echo $error
                            exit
                    fi
                fi
            fi
        done
    echo "=======================sql files in directory of $1 has been executed success===================="
    echo -e "=======================sql files in directory of $1 has been executed success====================" >>${LOG_FILE}
}

for path in ${SQL_PATHS[@]}
    do
        read_dir $path
    done

echo "sql files will be executed on MySql:" $host "-P" $port " in database database_name with" $user

for path in ${SQL_PATHS[@]}
    do
        exec_sql $path
    done
exit
;;
esac

2.在window下一切正常,但是到了linux环境下就直接报错了 ,类似“\r” command not found这种,具体的说明见这里:
https://cloud.tencent.com/developer/article/1068665

查资料的时候首先发现的是“dos2unix”命令的转换,但是发现centos7上并没有这个命令,查看了下安装方法,比较繁琐,发现有替代命令,果断启用dos2unix.
这是上边帖子中的描述:

当然,如果只是要转换格式,我们还有多种替代方案,没必要吊死在 dos2unix/unix2dos 上。毕竟有些系统可能没有这 2 个命令。

替代命令①:sed

以下2种都可以:

sed -e 's/.$//g' oldfile > newfile 
sed 's/^M//' oldfile > newfile #注意 ^M = Ctrl + v,Ctrl + m 命令组合打印出来的字符

替代命令②:tr

cat oldfile | tr -d "\r" > newfile

3.另外还有个问题,直接通过cat这种方式生成的shell脚本,默认是没有执行权限的,需要 chmod +x shell.sh来赋权限,让脚本可已执行。

相关文章

网友评论

      本文标题:自动化流水线中执行自动化脚本程序

      本文链接:https://www.haomeiwen.com/subject/eeuehctx.html