问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

makefile中怎么使用SHELL自定义函数

发布网友 发布时间:2022-04-09 12:06

我来回答

1个回答

热心网友 时间:2022-04-09 13:35

你的意思是在shell是怎么使用自定义函数吧?
下面给你个程序,你一看便知:(耐心看完)
#############################################################
#功能:装载指定目录数据
#作者:PENGWEI
#时间:2015-11-18
#############################################################
# 数据日期参数,待传入
V_DATA_DATE=$1
#FTP完成后数据存放路径
V_DATA_DIR=/home/almusr/data/odsdata/FTP/$V_DATA_DATE
# FTP完成后生成的标志文件所在路径
V_FTP_FLAG=/home/almusr/data/etl_load/FTPOK
# 解压数据前备份数据的存放路径
V_DATA_BAK=/home/almusr/data/odsdata/odsdata_bak
# 配置文件存放路径
V_CFG_DIR=/home/almusr/cfg
#日志文件
LOGDIR=/home/almusr/log/Loaddata_log
LOGFILE=$LOGDIR/LoadData_$V_DATA_DATE.log
# 初始化系统参数
DBNAME=ALMDB
USER=almusr
PASSWORD=almusr
SCHEMA=ODSUSR
#如果 日志目录不存在
if [ ! -d "${LOGDIR}" ]
then
#建立目录
mkdir -p "${LOGDIR}"
fi
#\n --回车
echo "\n日志文件[$LOGFILE]\n"
#日志函数
recordLog()
{
echo `date +"%Y-%m-%d %T"`": $1" | tee -a $LOGFILE
return 0
}
#判断参数个数
if [ $# -ne 1 ]
then
recordLog "Usage:$0 directory"
exit 1
fi
# $?表示上述命令执行后返回的状态(执行成功返回0 执行不成功返回非0)
if [ $? -ne 0 ]
then
recordLog "cd $V_DATA_DIR error !"
exit 1
fi
#连接数据库
db2 connect to $DBNAME user $USER using $PASSWORD
if [ $? -ne 0 ]
then
recordLog "connect[$DBNAME] fail!"
exit 1
fi
#加载数据

RETVAL=0
for i in `cat $V_CFG_DIR/tab_tmp2.cfg`
do
#读取表名并输出
TABLE_NAME=`echo $i | awk -F "," '{print $1}'`

#读取文件后缀名并输出
echo " the table_name is $TABLE_NAME"

#拼接文件名
FILENAME=${TABLE_NAME}.del
#解压缩 临时变量
FILENAME_TMP=$FILENAME.gz

echo "the FILENAME is $FILENAME"

recordLog "the FILENAME $FILENAME!"

# 第一步:对压缩文件备份,先扫描FTP完成标志,如果存在就说明FTP过程已结束,开始备份,否则等待继续扫描
#进去FTP完成标志所在目录
cd $V_FTP_FLAG
#扫描FTP完成标志
if [[ ! -e "${V_DATA_DATE}.ok" ]]; then
sleep 1800
else
cd $V_DATA_BAK
#备份文件
cp -r $V_DATA_DIR ${V_DATA_DATE}_bak
cd ${V_DATA_DATE}_bak
rm -rf ${V_DATA_DATE}

fi
recordLog "Copy data was finished"
# 第二步:删除30天前的备份数据
v_BakFileDate=`date -d "- 30 day ${V_DATA_DATE}" +%Y%m%d`

cd $V_DATA_BAK
rm -rf ${v_BakFileDate}_bak
recordLog "Removed the bak_data of 30 days before!"

# 第三步:对文件进行解压
cd $V_DATA_DIR

if [ -f $FILENAME_TMP ]
then
echo "$FILENAME_TMP must gunzip"

#解压文件
gunzip $FILENAME_TMP

echo "$FILENAME_TMP ,gunzip success"

else
echo "$FILENAME exist,next step"
recordLog "$FILENAME exist,next step!"
fi

# 第四步:数据加载
if [ -f $FILENAME ]
then
# CMD="db2 \"load from $FILENAME of del MODIFIED BY coldel0x23 usedefaults keepblanks decpt. replace into ODSUSR.$TABLE_NAME data buffer 10000\" > $LOGDIR/$TABLE_NAME_XX.log 2>&1"
CMD="db2 \"load from $FILENAME of del replace into ODSUSR.$TABLE_NAME data buffer 10000\" > $LOGDIR/$TABLE_NAME.log 2>&1"
echo "$FILENAME is loading"
eval $CMD

fi

echo "load data is over"

recordLog "load data is over"

# 第五步:判断加载是否正确
#判断是否正常加载
read_num=`cat $LOGDIR/$TABLE_NAME.log | grep "Number of rows read" | awk -F'=' '{print $2}'`
skip_num=`cat $LOGDIR/$TABLE_NAME.log | grep "Number of rows skipped" | awk -F'=' '{print $2}'`
load_num=`cat $LOGDIR/$TABLE_NAME.log | grep "Number of rows loaded" | awk -F'=' '{print $2}'`
reject_num=`cat $LOGDIR/$TABLE_NAME.log | grep "Number of rows rejected" | awk -F'=' '{print $2}'`
delete_num=`cat $LOGDIR/$TABLE_NAME.log | grep "Number of rows deleted" | awk -F'=' '{print $2}'`
commit_num=`cat $LOGDIR/$TABLE_NAME.log | grep "Number of rows committed" | awk -F'=' '{print $2}'`

echo "$read_num,$skip_num,$load_num,$reject_num,$delete_num,$commit_num"

#条件判断加载是否正确
if [[ "$read_num" -eq "$load_num" && "$load_num" -eq "$commit_num" ]]
then
echo "Data loading is perfect!"
else
cat $LOGDIR/$TABLE_NAME.log
recordLog "loading [$V_DATA_DIR/$TABLE_NAME] error!"
RETVAL=1
continue
fi
done
db2 connect reset >/dev/null 2>&1
if [ $RETVAL != 0 ]
then
recordLog "load data directory [$V_DATA_DIR] error!!!"
else
recordLog "load data directory [$V_DATA_DIR] successful!!!"
fi
# 第五步:完成退出

exit 0

你可以把上面这段代码拷贝出来,查看一下recordLog,这是个日志函数,自定义的,其中参数是外部传入的,调用格式也有,好好看看吧,别忘了点赞啊
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
如何在win10下安装docker? windows(win10)上的docker使用:安装(国内镜像)、操作 win10安装dockerWin10下Docker安装和使用 关于安装配置docker,找不到Hyper-V(win10 家庭版需要配置,专业版不需要... 怎么把微信上的聊天记录转到新手机 怎么把聊天记录转到另一个手机 快递被别人冒领,快递公司有没有责任 洋葱汤洋葱汤 一颗洋葱汤怎么做 一颗洋葱汤怎么做好吃 【车主点评:一个周末秒提21款宝马525LI】 300m无线路由器怎么设置密码 宝马525Li提车记录,怡情小改,颜值增加,牺牲部分舒适型 【车主点评:诚意之作,爱车宝马525Li】 【车主点评:高端品质,喜提宝马525Li】 水星300M无线路由器重新设置密码 mercury300m无线路由器怎么改密码 想入手宝马525Li,求问动力表现,请真实车主解答? 同样是宝马525Li,为什么有的*带有华晨宝马四个字,有的却没有?这有什么区别?不是说LI都是国产吗? 【车主点评:操控性极强的宝马525Li】 迅捷300m 无线宽带路由器 fw300r怎么改密码 宝马525li 领先版和豪华版的区别? 300m无线路由器密码忘了不知怎么设置修改 300m路由器wifi密码怎么改密码 怎样才能禁掉孩子的腾讯游戏 家里蜂蜜从碗里转移到玻璃瓶里,盖上盖子以后突然膨胀溢出,为什么呢_百度... 装蜂蜜的瓶子里有很多小泡泡,这是怎么回事? 这个是十年前保存下来的蜂蜜,一直未打开,现在打开换了个瓶子装,没有冷藏,然后起泡了,还能吃吗 在蜂农那里买的蜂蜜怎么这么稀 蜂蜜瓶包装用挤压的好不好? 数字万能表UA9208N 怎样换电池? skmei手表怎么换电池 施华洛世奇1187023手表换电池教程 放了几年的万能表换了电池不开机了怎么办? 眼眶皮样囊肿的介绍 眼眶皮样囊肿性别:女年龄:22病 眼眶皮样囊肿的诊断 得了眼眶皮样囊肿怎么办? 右眼眼睑处有白色的膜。医生检验是眼眶内上皮样囊肿。请问,第一,这是肿瘤吗?第二,手术摘除危险吗?第 眼眶皮样囊肿的临床表现 眼眶皮样囊肿的检查 眼眶里面的疙瘩能移动,会不会是眼眶皮样囊肿 眼眶皮样囊肿的治疗 眼眶皮样囊肿的病因 自己做卤菜,肉和菜可以放一起卤吗 做卤菜要注意哪些细节? 卤菜放什么肉不会烂 卤菜过程中,荤菜能放在一起卤吗?卤东西有什么讲究吗? 《天堂电影院》在内地上映,这是一部什么样的电影? 卤菜放什么使肉更有嚼劲