2015-12-22 60 views
0

字符串我想建立像在變量小零件下面建設外殼採用特殊字符

sqoop export --connect jdbc:db2://xx.xx.xx.xxx:50000/DB1 --username user1ib2c --password pass123! --table table1 --export-dir /user/hduser 

我已初步存儲東西的命令,然後嘗試在文件,如下合併

sqoop_cmd1="sqoop export --connect $target_db_url" 
sqoop_cmd2="--username $db_user_nm" 
sqoop_cmd3="--password $db_password" 
sqoop_cmd4="--table $tbl_nm_upr --export-dir $export_dir" 

`echo $sqoop_cmd1` > $sqoop_cmd 
`echo $sqoop_cmd2` >> $sqoop_cmd 
`echo $sqoop_cmd3` >> $sqoop_cmd 
`echo $sqoop_cmd4` >> $sqoop_cmd 

但像下面

script1.sh: line 77: --username: command not found 
script1.sh: line 78: --password: command not found 
script1.sh: line 79: --table: command not found 

這我使用的shell腳本得到錯誤:

#!/usr/bin/ksh 
 

 
loaddate=$(date +"%Y-%m-%d %H:%M:%S") 
 
date_val=$(date +"%Y%m%d_%H%M%S") 
 
RETURN_CODE=0 
 
param_file=$1 
 
tablename=$2 
 

 
. $1 
 

 
printf "Execution Started at: `date` \n" 
 

 
if [ "$#" -ne 2 ]; then 
 
    printf "At least two arguments are required" 
 
    exit 1 
 
fi 
 

 
tbl_nm_lwr=`echo $tablename | tr '[:upper:]' '[:lower:]'` 
 
printf "\n Lowercase table name = $tbl_nm_lwr \n" 
 

 
tbl_nm_upr=`echo $tablename | tr '[:lower:]' '[:upper:]'` 
 
printf "\n Uppercase table name = $tbl_nm_upr \n" 
 

 
fnl_tbl=TEST.$tbl_nm_upr 
 
printf "\n tablename = $fnl_tbl \n" 
 

 
#========================================================================== 
 
# Functionality to determine the execution time 
 
#========================================================================== 
 

 
ST_TIME=`date +%s` 
 

 
# create a zero byte file to confirm execution started 
 
touch data_copy_to_ioc.zerobyte 
 

 
sqoop_cmd=$tbl_nm_lwr"_sqoop" 
 
sqoop_cmd1=$tbl_nm_lwr"_sqoop1" 
 
sqoop_cmd2=$tbl_nm_lwr"_sqoop2" 
 
sqoop_cmd3=$tbl_nm_lwr"_sqoop3" 
 
sqoop_cmd4=$tbl_nm_lwr"_sqoop4" 
 

 
sqoop_cmd1="sqoop export --connect $target_db_url" 
 
sqoop_cmd2="--username $db_user_nm" 
 
sqoop_cmd3="--password $db_password" 
 
sqoop_cmd4="--table $tbl_nm_upr --export-dir $export_dir" 
 

 
echo -n " ${sqoop_cmd1}" > $sqoop_cmd 
 
echo -n " ${sqoop_cmd2}" >> $sqoop_cmd 
 
echo -n " ${sqoop_cmd3}" >> $sqoop_cmd 
 
echo -n " ${sqoop_cmd4}" >> $sqoop_cmd 
 

 
if [ $RETURN_CODE -eq 0 ]; then 
 
    printf "\n Success: Table $tablename exported successfully at `date` \n" 
 
else 
 
    printf "\n Error: RETURN_CODE=$RETURN_CODE exported $tablename at `date`" 
 
    exit $RETURN_CODE 
 
fi 
 

 
rm -f data_copy_to_ioc.zerobyte 
 

 
RETURN_CODE=$? 
 

 
if [ 0 -ne $RETURN_CODE ] 
 
    then 
 
     printf "\n Error: RETURN_CODE=$RETURN_CODE exported $tablename at `date`" 
 
     exit $RETURN_CODE 
 
    else 
 
     printf "\n Success: Export completed for $tablename at `date` \n" 
 
fi 
 

 
#========================================================================== 
 
# Calculate the time taken by the script 
 
#========================================================================== 
 
END_TIME=`date +%s` 
 
TT_SECS=$((END_TIME - ST_TIME)) 
 
TT_HRS=$((TT_SECS/3600)) 
 
TT_REM_MS=$((TT_SECS % 3600)) 
 
TT_MINS=$((TT_REM_MS/60)) 
 
TT_REM_SECS=$((TT_REM_MS % 60)) 
 
printf "\n" 
 
printf "Total time taken to complete for $tbl_nm_lwr="$TT_HRS:$TT_MINS:$TT_REM_SECS HH:MM:SS 
 
printf "\n" 
 

 
exit $RETURN_CODE

嘗試使用sh sqoopioc_koushik.sh /home/hduser/data_copytoioc_param.conf TABLE1

的配置文件來運行它,如下:

log_dir=/home/hduser/Logs 
 
log_file=export_data_from_bigsql_to_DB2 
 
export_dir=/home/hduser/export 
 
hdfs_defult_dir=/tmp/$whoami 
 
sqoop_dir=/usr/iop/4.0.0.0/sqoop/bin 
 
target_db_ip=100.100.100.100 
 
target_db_port=50000 
 
target_db_nm=TESTDB 
 
db_user_nm=user1 
 
db_password=ChangeM3N0w\! 
 
target_db_url=jdbc:db2://100.100.100.100:50000/TESTDB 
 
target_db_schema=TEST 
 
bigsql_user=bigsql 
 
bigsql_password=pass123

+0

使用echo與「-n」fla g並且在每個cmd_value的末尾都有空格。 – Jas

+0

我希望你正在聲明$ target_db_url,$ db_user_nm和你在sqoop_cmdN變量中使用的其他變量。你也不需要反引號來包圍'echo'並使用帶有「-n」標誌的echo。 – Jas

+0

「我不明白當他們做了我沒有想到的事情時,會發生什麼反作用並且感到驚訝。」把它們拿出來。 – tripleee

回答

0

定義contstant值

target_db_url="jdbc:db2://xx.xx.xx.xxx:50000/DB1" 
db_user_nm="user1ib2c" 
db_password="pass123!" 
tbl_nm_upr="table1" 
export_dir="/user/hduser" 

建立個人串

sqoop_cmd1="sqoop export --connect $target_db_url" 
sqoop_cmd2="--username $db_user_nm" 
sqoop_cmd3="--password $db_password" 
sqoop_cmd4="--table $tbl_nm_upr --export-dir $export_dir" 

最終的腳本文件名

sqoop_cmd="script1.sh" 

使用回聲 「-n」(沒有新的線路,如回聲增加了一個新行默認)

echo -n " ${sqoop_cmd1}" > $sqoop_cmd 
echo -n " ${sqoop_cmd2}" >> $sqoop_cmd 
echo -n " ${sqoop_cmd3}" >> $sqoop_cmd 
echo -n " ${sqoop_cmd4}" >> $sqoop_cmd 
+0

它只存儲$ sqoop_cmd文件中的部分db_name。不是整個字符串 –

+0

我得到了在文件中內置的以下命令。 sqoop export --connect jdbc:db2://100.100.100.100:50000/TESTDB --username user1 --password ChangeM3N0w! --table ALPHA --export-dir/home/hduser/export – Jas

+0

plz看看我正在使用的腳本..那裏它沒有得到建立..我已經在我原來的帖子中添加腳本。可能我正在犯一些我無法追查的錯誤。 –