#!/bin/ksh---- 若是文件的第一個字符不是#說明使用的是Bsh,若是第一個字符是#則使用Csh,
若是第一個字符#後面跟!/bin/ksh,說明該腳本使用指定的shell 執行,即爲/bin目錄下的ksh解釋執行. ‘#’是註釋符,‘!’緊跟着‘#’一塊兒表示在執行這個腳本時
使用其後的「/bin/ksh」解釋器執行腳本文件中後面的內容。
同時「/bin/ksh」表示解釋器所在的路徑linux
basedir是通常工做目錄。sql
homedir是登陸後的目錄(終端)。shell
/bin 二進制可執行命令windows
/dev 設備特殊文件
/etc 系統管理和配置文件
/etc/rc.d 啓動的配置文件和腳本
/home 用戶主目錄的基點,好比用戶user的主目錄就是/home/user,能夠用~user表示
/lib 標準程序設計庫,又叫動態連接共享庫,做用相似windows裏的.dll文件
/sbin 超級管理命令,這裏存放的是系統管理員使用的管理程序
/tmp 公共的臨時文件存儲點
/root 系統管理員的主目錄
/mnt 系統提供這個目錄是讓用戶臨時掛載其餘的文件系統
/lost+found這個目錄平時是空的,系統非正常關機而留下「無家可歸」的文件(windows下叫什麼.chk)就在這裏
/proc 虛擬的目錄,是系統內存的映射。可直接訪問這個目錄來獲取系統信息。
/var 某些大文件的溢出區,比方說各類服務的日誌文件
/usr 最龐大的目錄,要用到的應用程序和文件幾乎都在這個目錄,其中包含:app
/usr/x11R6 存放x window的目錄
/usr/bin 衆多的應用程序
/usr/sbin 超級用戶的一些管理程序
/usr/doc linux文檔
/usr/include linux下開發和編譯應用程序所須要的頭文件
/usr/lib 經常使用的動態連接庫和軟件包的配置文件
/usr/man 幫助文檔
/usr/src 源代碼,linux內核的源代碼就放在/usr/src/linux裏
/usr/local/bin 本地增長的命令
/usr/local/lib 本地增長的庫根文件系統設計
#表數據導入3d
HOMEDIR=$PWD--當前目錄日誌
THISNAME=`basename $0`code
usage(){
echo
echo "Oracle庫表數據導入"
echo "========================="
echo
echo "Usage:"
echo " $THISNAME -Uuser -Ffilename -Ttblname "
echo
echo "Parameter:"
echo " -U 用戶名/密碼@服務名"
echo " -F 數據文件名"
echo " -T 表名"
echo
exit 1
}ip
# 參數分析
#echo "入參個數[$#]"
if [ $# -ne 3 -a $# -ne 6 ] ;then
usage ;
fi
while getopts U:P:F:T: OPTION
do
case $OPTION in
U) DBUSR=$OPTARG
#echo "用戶名:[${DBUSR}]"
;;
F) DATAFILE=$OPTARG
#echo "導入文件名:[${DATAFILE}]"
;;
T) TBLNAME1=$OPTARG
TBLNAME=${TBLNAME1};
#echo "導入文件名:[${TBLNAME1}]"
;;
?) usage ;;
*) usage ;;
esac
done
rm ${TBLNAME}.ctl
#下載表數據
# if [ -z "$DBUSR" ] || [-z "$DATAFILE"] || [-z "$TBLNAME1"]; then
# echo "Usage:load -U 用戶名/密碼@服務名 -F 數據文件名 -T 表名\n"
# exit
# fi
echo "表[$TBLNAME]開始導入\n"
SQLFILD="COLUMN_NAME ||decode(sign(DATA_LENGTH-255),1,concat(concat(' char(', DATA_LENGTH), ')')) "
sqlwhere="table_name=upper('$TBLNAME')"
SQLS="select ${SQLFILD} from user_tab_columns where ${sqlwhere} order by table_name,column_id;"
#echo $SQLS
sqlplus -S ${DBUSR} <<-!!! >/dev/null
set colsep '|'
set heading off
set feedback off
set pagesize 0
set linesize 3000
set echo off
set termout off
set verify off
set numwidth 16
set trimspool on
spool ${TBLNAME}.a
${SQLS}
spool off
!!!
HEAD="load data infile '${DATAFILE}' append into
table ${TBLNAME} FIELDS TERMINATED BY \"|\" TRAILING NULLCOLS ("
cat ${TBLNAME}.a | sed 's/$/,/g' | sed 's/ *//g'|sed -n '1,$p' > ${TBLNAME}.b
cat ${TBLNAME}.b | sed '$s/,//'|sed -n '1,$p' > ${TBLNAME}.a
#echo "控制文件頭:[${HEAD}]"
echo $HEAD>${TBLNAME}.txt
echo ")">tail.txt
cat ${TBLNAME}.txt ${TBLNAME}.a tail.txt>${TBLNAME}.c
cat ${TBLNAME}.c | sed 's/char(/ char(/g'|sed -n '1,$p'>${TBLNAME}.ctl
rm ${TBLNAME}.txt
rm tail.txt
rm ${TBLNAME}.a
rm ${TBLNAME}.b
rm ${TBLNAME}.c
if [ $? -ne 0 ]; then
echo "生成表[$TBLNAME]控制文件失敗\n"
fi
echo "生成表[$TBLNAME]控制文件完成,導入數據,請查看結果\n"
sqlldr ${DBUSR} control=${TBLNAME}.ctl log=${TBLNAME}.log bad=${TBLNAME}.bad errors=10000 retcode=`echo $?` case "$retcode" in 0) echo "\nSQL*Loader execution successful" ;; 1) echo "\nSQL*Loader execution exited with EX_FAIL, see logfile" ;; 2) echo "\nSQL*Loader execution exited with EX_WARN, see logfile" ;; 3) echo "\nSQL*Loader execution encountered a fatal error" ;; *) echo "unknown return code";; esac echo "表[$TBLNAME]導入結束\n"