用shell解释Symfoware的rdbddlex命令

来源:互联网 发布:国际日期变更线的算法 编辑:程序博客网 时间:2024/05/16 06:34

最近的一个小项目因为不晓得shell编程被PM羞辱了,呜....
具体如下:
Symfoware中有两个命令能够执行DDL:命令rdbexecsql和命令rdbddlex
rdbddlex是比较早的命令,rdbexecsql则是最近开发的,支持DML,最近做了扩展。也支持了DDL
所以,rdbexecsql覆盖了rdbddlex的功能
现在想用rdbddlex的测试集测试rdbexecsql,有一个简单的方法,就是写一个shell程序,用rdbexecsql命令解释rdbddlex
写这个shell,需要用到getopts命令和熟悉rdbexecsql与rdbddlex两个命令之间的差异
删减版的shell程序的框架示意如下:
-----------------------------------------------------------------------rdbddlex程序开始-----------------------------------------------------------------------
#!/bin/bash
#rdbddlex -- use rdbexecsql to replace rdbddlex(include their options)
##############################################################################################
while getopts ":d:xlv:" OPTION
#:对":d:xlv:"的解释:
#":d:xlv:"是rdbddlex支持的参数
#“:“表示之前的option要有相应的参数,比如-d选项后必须跟数据库名
#d之前有个”:“是因为rdbddlex 的选项都是可选的,但是必须跟一个文件名作为rdbddlex 的参数
do
    case $OPTION in
        d)dbopt=Y
           dbname=$OPTARG;;#变量$OPTARG保存了当前$OPTION对应的参数(如果有的话)
        x)xopt=Y;;
        l)lopt=Y;;
        v)if [ ${OPTARG}M = "CLM"M ];then
                vopt=Y
           else
                   echo "usage:rdbddlex [ -d 数据库名][ -x ][ -l ][ -v CLM ] 文件名"
                exit  1
           fi;;
        ?)echo "usage:rdbddlex [ -d 数据库名 ][ -x ][ -l ][ -v CLM ]文件名"
           exit  1;;
    esac
done
shift $(($OPTIND - 1))
filename=$*
#*标示所有,也就是取了所有的参数,比如rdbddlex -d db1 file1 file2,
#那么filename=file1 file2,如果filename=$1,则filename=file1
#################################################################################################
#map关系
#无视rdbddlex的-x和-v CLM选项
# rdbddlex的-d选项用rdbexecsql -s替代
# rdbddlex的-l选项用rdbexecsql -c替代
#################################################################################################
if [ ${dbopt}M = "Y"M ];then
    if [ ${lopt}M = "Y"M ];then
        rdbexecsql -s $dbname -c $filename  
    else
        rdbexecsql -s $dbname  $filename
    fi
else
    if [ ${lopt}M = "Y"M ];then
        rdbexecsql  -c $filename
    else
        rdbexecsql  $filename
    fi       
fi
-----------------------------------------------------------------------rdbddlex程序结束-----------------------------------------------------------------------
脚本做好之后,虽然测试时候执行的rdbddlex其实是自己解释过的,用的是rdbexecsql,这样一套测试集就可以被两个命令共用了