最近完成了一个cshell程序的编写,在这里记录总结一下,以便有需要的朋友可以参考。都是些基本的功能点,高手可忽略。
1.获取系统时间及年月的推算(例子中是向前推算一个月,也就是计算当前年月的上一个月的年月。这里主要注意的是语法及各变量的使用,最后的 $AC_Month格式为YYYYMM,如果月数小于10需要补0)
# date就是系统时间,这里取其年和月
set Sys_Year=`date '+%Y'`
set Sys_Month=`date '+%m'`
if ( ${Sys_Month} == 1 ) then
@ Sys_Year = $Sys_Year - 1
@ Sys_Month = 12
else
@ Sys_Month = $Sys_Month - 1
endif
if (${Sys_Month} < 10 ) then
set AC_Month=${Sys_Year}0${Sys_Month}
else
set AC_Month=$Sys_Year${Sys_Month}
endif
echo "AC_Month: " $AC_Month
2.从数据库中获取数据并返回给shell变量($DBUser,$DBPwd,$DBName,$ScriptPath这四个变量的定义就不用说了吧)
set logon=$DBUser/$DBPwd@$DBName
set DelMonthCountTemp=`sqlplus -s $logon @$ScriptPath/dataimport/sql/GetMonthCount.sql`
echo $DelMonthCountTemp
#GetMonthCount.sql中的内容如下(可改变SQL语句实现取值,这里取得值只是一个值,多个值的情况未试过):
set heading off feedback off verify off
select HZNKKN from CD_TBLMAX where DATAKBN='tbl';
exit
3.文件合并(cat XX1 XX2 > XX3就是把XX2合并到XX1的后面生成新的XX3)
cat $ScriptPath/log/DeleteTemp.log $ScriptPath/log/DeleteTemp2.log > $ScriptPath/log/Delete.log
4.shell调用sqlldr导数据到数据库(这里有两种方法)
1)数据文件的位置写在ctl文件中
sqlldr $DBUser/$DBPwd@$DBName rows=10000 errors=0 control="$ScriptPath/dataimport/bin/load_PMSB.ctl" log="$ScriptPath/log/sqlLoader.log" bad="$ScriptPath/log/loaderr.bad"
#ctl文件格式如下:
LOAD DATA
INFILE 'pa0804.txt'
APPEND PRESERVE BLANKS
INTO TABLE PMS_B
FIELDS TERMINATED BY ' '
TRAILING NULLCOLS
( TBL_ID POSITION(1:1) CHAR,
......)
2)数据文件的位置直接写在sqlldr参数中
sqlldr $DBUser/$DBPwd@$DBName rows=10000 errors=0 data="$ScriptPath/download/DSSPA.txt" control="$ScriptPath/dataimport/bin/load_PMSB.ctl" log="$ScriptPath/log/sqlLoader.log" bad="$ScriptPath/log/loaderr.bad"
#ctl文件格式如下:
LOAD DATA
INFILE *
APPEND PRESERVE BLANKS
INTO TABLE PMS_B
FIELDS TERMINATED BY ' '
TRAILING NULLCOLS
( TBL_ID POSITION(1:1) CHAR,
......)
5.遍历一个目录
set AllList=`find $ScriptPath/backup -type f | grep -v bak`
foreach FullFileName($AllList)
echo $FullFileName
end
6.计算字符串长度
set FullFileLen=`echo $FullFileName|wc -c`
7.字符串截取
#从字符串的第一位开始到第二位结束
set StrPA=`echo $FileName| cut -b 1-2`
#从字符串的第十位开始到第十二位结束
set StrTXT=`echo $FileName| cut -b 10-12`