2015-12-22 59 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看看我正在使用的脚本..那里它没有得到建立..我已经在我原来的帖子中添加脚本。可能我正在犯一些我无法追查的错误。 –