shell脚本中,根据传入的参数动态拼接

shell脚本中,根据传入的参数动态拼接。

#!/bin/sh
DATA_LOG=/sams/bbb/mytest.log
# 执行的命令,携带了7个参数,分别要查询的7个字段
# sh select.sh t.TASKCODE t.TASKNAME t.PRIORITY t.CONTENT t.STATUS t.TASKCLASS "to char(t.EFFICIENTDATE,'yyyy-mm dd')"
echo "参数个数: "$#
P_COUNT=S#
PARMAERS=""
if [[ $(P_COUNT)==0 ]];then
	PARMAERS="*"  # 如果没有参数,查询所有*,但是dat格式不好处理,所以一般会传入参数
else
	PARMAER_LIST=($*)    # 通过$*取到所有参数,把它们放入一个数组
	SYMBOL="||'|+|'||"  # 要拼接的字符
	COUNT=$(#PARMAER_LIST[*])
	for (( i=0;i<$COUNT;i++ ))
	do
		if [[ $i = $(($COUNT-1)) ]];then
			PARMAERS=${PARMAERS}$(PARMAER_LIST[i]}   # 最后一个不加指定字符
		else
			PARMAERS=${PARMAERS}$(PARMAER_LIST[i]}${SYMBOL}   #最后一个之前的加上了SYMBOL指定的符号
		fi
	done
fi
echo PARMAERS=${PARMAERS}  # 按照自己想要的拼接成功了

sqlplus -S ${SAMS_DBURL} 1>> ${DATA_LOG} 2>&1 << EOF
	set feedback off
	set heading off
	set linesize 500
	set trimspool on
	set pagesize 0
	spool on
	spool /sams/bbb/mydata.dat
		select ${PARMAERS} from sys_task t;
	spool off
	quit;
 exit;
EOF

说明:执行了select.sh脚本,传入了7个参数,这7个参数就是sql中需要查询的字段。由于每次查询的字段不同,所以对参数进行了拼接。查询结果会生成一个/sams/bbb/mydata.dat的文件。格式是每个字段中间使用 |+| 隔开。

sqlplus相关参数说明请参考下列文章:
shell脚本使用sqlplus,查数据库生成指定文件

你可能感兴趣的:(java,开发语言)