zoukankan      html  css  js  c++  java
  • shell脚本写host类型executable

    最近在做一个的项目,因为有些功能使用ORACLEpackage实现起来有点问题,但是用UNIX的脚本实现起来却很好,所以最终在AP上挂了一个executableHOST类型的REQUEST,来解决这个问题。

    因为觉得这个东西有点意思,所以把我了解到的一些很基本的东西share出来。


    首先,必须有一个UNIX下面可以执行的shell script文件,而且这个文件必须放在相应Applicationbin目录下,例如,如果要将该request挂在GL下面,相应的目录就是

    $GL_TOP/$APPLBIN/

    而且,要确保REQUEST执行者对这个文件的execute权限,例如在开发环境,如果将该文件放在DEV2下,则DEV2AP这个用户需要对该文件有execute权限。

    而挂request的过程与挂普通request过程一样。

    重点在这个shell script,注意这个文件一定要符合UNIX shell script的格式,另外推荐在UNIX环境下编写script,因为windows下面的换行符与UNIX下面不同。

    传参,脚本读取request的参数是通过 $1”这种方式来读取参数的。关于传参,USER GUIDE上面有说$1-$4是内定的一些系统参数,用户自定义的参数需要从$5开始。但是我实际在DEV2以及DEV4下面测试,却发现,不是这样的。

    HOST类型executable在传参的时候,将所有的参数都放在一个字符串里面传给参数1,系统参数在前,自定义参数在后,而且无论设置参数类型为什么,系统总是会在参数值两边加上双引号,并且以空格来间隔各参数。

    例如,我输入3个字符串参数,分别为

    “test1”, “test2”, “test3”

    那么从$1将得到一个字符串:

    XXGLCONVERTFILE FCP_REQID=2303143 FCP_LOGIN="<USERID>/<PWD>"

    FCP_USERID=1047 FCP_USERNAME="<USERNAME>" FCP_PRINTER="noprint"

    FCP_SAVE_OUT=Y FCP_NUM_COPIES=0 "test1" "test2" "test3"

    可以看到,系统参数除了第一个是SHELL脚本名称以外,其他的都是一系列的参数(NAME=VALUE)对,而且最后一个一般都是FCP_NUM_COPIES,并且值是一个数字,然后才是我们自定义的参数。于是,我们可以根据这个字符串的特点来读取我们自己的参数。

    UNIX下面有一个功能强大的编辑工具SED,我们可以利用这个命令来达到我们获取参数值的目的。

    关于SED命令的详细使用,可以查阅相关资料。

    首先,我们读取$1截取掉系统参数,并将加在自定义参数两边的双引号去掉。

    args=`echo $1 | sed "s/^.*FCP_NUM_COPIES=[0-9]* *"//" | sed "s/"//g"`

    注意“s”表示替换字符,源字符与目的字符使用“/”间隔包含:

    sed "s/source/destination/"

    这样我们对上述字符串处理之后,正下的字符串就是:

    test1 test2 test3

    接下来,我们可以继续用sed命令截取各个参数值:

    arg1=`echo $args|sed "s/ .*//"`

    arg2=`echo $args|sed "s/$arg1 //"|sed "s/ .*//"`

    arg3=`echo $args|sed "s/$arg1 $arg2 //"|sed "s/ .*//"`

    在获得各参数值后,我们就可以尽情的发挥我们的功力处理他们了,

    args=`echo $1|sed "s/^.*FCP_NUM_COPIES=[0-9]* *"//"|sed "s/"//g"`

    echo "args: "$args

    arg1=`echo $args|sed "s/ .*//"`

    echo "arg1: "$arg1

    arg2=`echo $args|sed "s/$arg1 //"|sed "s/ .*//"`

    echo "arg2: "$arg2

    arg3=`echo $args|sed "s/$arg1 $arg2 //"|sed "s/ .*//"`

    echo "arg3: "$arg3

    如果输入参数“test1”, “test2”, “test3”,以上程序的结果如下:

    args: test1 test2 test3
    arg1: test1
    arg2: test2
    arg3: test3

    当然以上代码只适用于比较简单的情况,例如如果参数值中有空格或者斜杠就必须另外考虑了,不过sed命令相当强大,而且可以结合正则表达式使用,用它来处理一般都不会有问题。

    如果要退出执行,可以直接用“exit”后面跟上一个数字表示退出代码,如果不加,系统默认为0,表示成功,0以外的数字表示失败(我没有查到怎样返回warning)。

    http://wolfyuan.itpub.net/post/25778/280094

             

                成长

           /      |     \

        学习   总结   分享

    QQ交流群:122230156

  • 相关阅读:
    交互式shell和非交互式shell、登录shell和非登录shell的区别
    cocos2d-x入门笔记(1)
    《你的知识需要管理》读后感悟以及笔记
    Qt入门之信号与槽机制
    《程序员的思维修炼》读书笔记以及感悟
    Py邮件
    2018-2019 20165226 Exp9 Web安全基础
    2018-2019 20165226 Exp 8 Web基础
    2018-2019 20165226 Exp7 网络欺诈防范
    2018-2019 20165226 Exp6 信息搜集与漏洞扫描
  • 原文地址:https://www.cnblogs.com/benio/p/2077311.html
Copyright © 2011-2022 走看看