當前位置:首頁 » 編程軟體 » 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

熱點內容
ftp伺服器輸入密碼 發布:2025-01-24 05:27:41 瀏覽:209
電信帳號怎麼改密碼 發布:2025-01-24 05:11:22 瀏覽:846
筆記本x17配置怎麼選 發布:2025-01-24 05:05:53 瀏覽:7
python如何封裝 發布:2025-01-24 05:05:46 瀏覽:843
csgo怎麼連接伺服器 發布:2025-01-24 05:05:45 瀏覽:322
408哪個配置合適 發布:2025-01-24 05:01:54 瀏覽:882
oraclesql刪除重復 發布:2025-01-24 05:01:12 瀏覽:408
少兒編程排行 發布:2025-01-24 04:40:46 瀏覽:698
搭建伺服器怎麼使用 發布:2025-01-24 04:19:34 瀏覽:444
平行進口霸道哪些配置有用 發布:2025-01-24 04:19:32 瀏覽:874