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

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       将字符串转换成大写


clear
Str="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="$LogFile
OptLogInf.sh $LogFile "abc"
echo "打印日志/"abc/"到$LogFile并回显"
cat $LogFile
rm -f $LogFile

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


clear
StrRet=`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.log
OutFile=./Demo4.txt
DB="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
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值