当前位置:首页 » 编程软件 » makefile执行shell脚本

makefile执行shell脚本

发布时间: 2022-03-31 14:06:35

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

你的意思是在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,这是个日志函数,自定义的,其中参数是外部传入的,调用格式也有,好好看看吧,别忘了点赞啊

‘贰’ 关于c代码编译文件makefile的疑问: SHELL = @SHELL@

在使用autoconf工具的时候,才需要写成类似这样@SHELL@的形式

‘叁’ 在一个Makefile中的语句 $(shell pwd)/include/

makefile中,要调用shell脚本。需要特殊的语法。
比如要调用xxx命令。
相应的语法是
$(shell xxx)

你直接使用xxx,比如pwd命令。人家makefile哪知道是shell命令啊。它只会把pwd当成makefile变量或者规则。

‘肆’ linux下makefile文件在target中调用shell脚本,shell脚本定义变量的问题

你应该source 一下你的文件,让你 的内容在父进程中生效

‘伍’ Makefile、shell脚本在哪门课程上学习

说实话,你说的这些任何一块语言都够你学一阵子的。
你最好还是选择性学习,比如你想做什么,干什么,针对性的学。
因为你说的这些基本上互相联系都不大。你还是着重挑一门学吧。
你说的这些有些我也没发言权,我就谈几个我看过的推荐一下

python最近我也在看,基本上是《python语言入门》和《python核心编程》两本串换着看。

shell的话
我建议先看《shell脚本学习指南》或《实战LINUX+SHELL编程与服务器管理》
然后进阶看《高级Bash脚本编程指南》

别的我就无法推荐了

‘陆’ Linux基础中,shell脚本和makefile文件的差别是什么啊,求详细点嘛

你可以认为makefile是shell脚本“派生”出来的。最朴素的makefile可以完全通过gcc等语句实现,在这种情况下也就是shell脚本了。但是为了方便,makefile引入了大量的语法用来使编译链接变得简单,所以和shell脚本还是不同的。
可以参考:http://apps.hi..com/share/detail/31232485

‘柒’ Linux下shell脚本怎么实现运行某个文件的makefile

make工具就知道阿,makefile文件里描述了编译参数等信息

‘捌’ 如何在makefile中以source 来运行一个shell脚本

make -f /Path/to/your/project/Makefile

e.g.

make -f ~/nagios/xxx/src/Makefile

热点内容
如何用安卓编译项目 发布:2025-01-24 08:30:46 浏览:863
计算机同时输出和存储设备的区别 发布:2025-01-24 08:29:21 浏览:581
食物语上传 发布:2025-01-24 07:58:44 浏览:754
编程相关书籍 发布:2025-01-24 07:55:45 浏览:430
英雄联盟手游需要哪些配置 发布:2025-01-24 07:42:03 浏览:985
regex可以静态编译吗 发布:2025-01-24 07:40:32 浏览:79
怎么编译rec 发布:2025-01-24 07:39:04 浏览:56
卡片没加密 发布:2025-01-24 07:33:56 浏览:381
linux备份mysql 发布:2025-01-24 07:26:54 浏览:391
苹果手机忘记id密码怎么刷机 发布:2025-01-24 07:26:47 浏览:695