一组在Unix下编写 shell 和 Informix dbaccess 编程的工具

    技术2022-05-11  66

    shell 是 Unix 环境下的主要编程工具之一,一般来说,可以用shell解决的问题就用shell,不行就用awk再不行才用C。而且 shell 是脚本文件,一般来说在不同品牌的 Unix 中都可以运行,不象C要重新编译,可见 shell 是 Unix 系统管理及编程的重要工具。 不过 shell 中虽然可以自定义函数,但不能象C那样通过 include 语句引用其他文件中函数库,因此代码可读性较差,往往只是为了取出系统上一天的日期,需要在 shell 脚本文件中附上长长的代码。

    以下提供一个工具,安装非常简单,只需要将GETools.tar解到$HOME目录下,如:tar xvf $HOME/GETools.tar $HOME/GETools,然后修改.profile,在PATH环境变量加上:$HOME/GETools。

    工具下载:http://www.greatengine.com/Download/GETools.tar

    以下是示范代码:

    #字符串处理脚本[Demo1.sh]#GetStr.sh      从源字符串中截取开始串及结束串包围的部分#InStr.sh       返回子字符串在源字符串中出现的位置#LCase.sh       将字符串转换成小写#Left.sh        从左截取字符串的一部分       #Len.sh         返回字符串的长度#Mid.sh         截取字符串的一部分#Right.sh       从右截取字符串的一部分#String.sh      返回N个重复字符串#UCase.sh       将字符串转换成大写

    clearStr="Hello The World"echo "设置字符串变量/nStr="$Str

    StrRet=`GetStr.sh "$Str" "Hello" "World"`echo "/n执行[从源字符串中截取开始串及结束串包围的部分]/nGetStr.sh /"$Str/" /"Hello/" /"World/""echo "显示"$StrRet

    StrRet=`InStr.sh "$Str" "The"`echo "/n执行[返回子字符串在源字符串中出现的位置]/nInStr.sh /"$Str/" /"The/""echo "显示"$StrRet

    StrRet=`LCase.sh "$Str"`echo "/n执行[将字符串转换成小写]/nLCase.sh /"$Str/""echo "显示"$StrRet

    StrRet=`Left.sh "$Str" "3"`echo "/n执行[从左截取字符串的一部分]/nLeft.sh /"$Str/" /"3/""echo "显示"$StrRet

    StrRet=`Len.sh "$Str"`echo "/n执行[返回字符串的长度]/nLen.sh /"$Str/""echo "显示"$StrRet

    StrRet=`Mid.sh "$Str" "4" "6"`echo "/n执行[截取字符串的一部分]/nMid.sh /"$Str/" /"4/" /"6/""echo "显示"$StrRet

    StrRet=`Right.sh "$Str" "5"`echo "/n执行[从右截取字符串的一部分]/nRight.sh /"$Str/" /"5/""echo "显示"$StrRet

    StrRet=`String.sh  "20" "*"`echo "/n执行[返回N个重复字符串]/nString.sh /"20/" /"*/""echo "显示"$StrRet

    StrRet=`UCase.sh "$Str"`echo "/n执行[将字符串转换成大写]/nUCase.sh /"$Str/""echo "显示"$StrRet

    #辅助类脚本[Demo2.sh]#GetTmpName.sh  返回一个唯一的文件名#OptLogInf.sh   打印操作日志

     

    StrRet=`GetTmpName.sh`echo "/n执行[返回一个唯一的文件名]/nGetTmpName.sh"echo "显示"$StrRet

    LogFile="/tmp/GETools.log"echo "/n设置日志文件变量/nLogFile="$LogFileOptLogInf.sh $LogFile "abc"echo "打印日志/"abc/"到$LogFile并回显"cat $LogFilerm -f $LogFile

    #日期类脚本[Demo3.sh]#GetNow.sh           返回当前时间#GetToday.sh         返回当前日期#IfxGetDateAdd.sh    返回指定日期的偏移日期#IfxGetTodayAdd.sh   返回当天的偏移日期

    clearStrRet=`GetNow.sh`echo "/n执行[返回当前时间]/nGetNow.sh"echo "显示"$StrRet

    StrRet=`GetNow.sh "-"`echo "/n执行[返回当前时间]/nGetNow.sh /"-/""echo "显示"$StrRet

    StrRet=`GetToday.sh`echo "/n执行[返回当前日期]/nGetToday.sh"echo "显示"$StrRet

    StrRet=`GetToday.sh "/"`echo "/n执行[返回当前日期]/nGetToday.sh /"//""echo "显示"$StrRet

    StrRet=`IfxGetDateAdd.sh "-1" "2006-3-1"`echo "/n执行[返回指定日期的偏移日期]/nIfxGetDateAdd.sh /"-1/" /"2006-3-1/""echo "显示"$StrRet

    StrRet=`IfxGetDateAdd.sh "-2" "2006-3-1" "-"`echo "/n执行[返回指定日期的偏移日期]/nIfxGetDateAdd.sh /"-2/" /"2006-3-1/" /"-/""echo "显示"$StrRet

    StrRet=`IfxGetTodayAdd.sh "-1"`echo "/n执行[返回当天的偏移日期]/IfxGetTodayAdd.sh /"-1/" /"2006-3-1/""echo "显示"$StrRet

    StrRet=`IfxGetTodayAdd.sh "-2" "-"`echo "/n执行[返回当天的偏移日期]/nIfxGetTodayAdd.sh /"-2/" /"-/""echo "显示"$StrRet

    #[Demo4.sh]#一般来讲,在shell dbaccess代码段中不能象存储过程中那样使用判断语句,因此只能顺#序执行#以下示例通过调用IfxSQLGet.sh实现在Shell中调用 dbaccess 也可以使用判断语句,则时#调用 OptLogInf.sh 记录操作日志

    LogFile=./Demo4.logOutFile=./Demo4.txtDB="gdcall"SQL="select count(*) from systables where tabname='tabtest'"Tabs=`IfxSQLGet.sh "$DB" "$SQL"`

    OptLogInf.sh "$LogFile" "[Demo4.sh示例开始]/n/n"#注意,在 dbaccess 代码段中的!不能缩进if [ $Tabs -eq 0 ]then  #表未创建   dbaccess $DB 1>>$LogFile 2>>$LogFile <<!!OptLogInf.sh "$LogFile" "未创建表,现在创建..."      create table tabtest      (         f1 int,         f2 char(10)      );!OptLogInf.sh "$LogFile" "创建表完毕"!

    else  #表已创建

       dbaccess $DB 1>>$LogFile 2>>$LogFile <<!!OptLogInf.sh "$LogFile" "表已创建,删除数据..."      delete from tabtest;!OptLogInf.sh "$LogFile" "删除数据完毕"!fi

    dbaccess $DB 1>>$LogFile 2>>$LogFile <<!!OptLogInf.sh "$LogFile" "插入数据..."   insert into tabtest(f1,f2) values(1,'aaa');   insert into tabtest(f1,f2) values(2,'bbb');   insert into tabtest(f1,f2) values(3,'ccc');!OptLogInf.sh "$LogFile" "导出数据到[$OutFile]..."   unload to $OutFile   select * from tabtest;!OptLogInf.sh "$LogFile" "导出结束"!

    OptLogInf.sh "$LogFile" "[Demo4.sh示例结束]/n/n"


    最新回复(0)