2016-10-13 71 views
0
file_path="$1" 
    db_name="$2" 
    table_name="$3" 
    partition_name="$4" 
    usage(){ 
    echo "you have used the command in a wrong manner " 
    echo "USAGE : sh LOAD_DATA.sh <<filepath>> <<db_name>> <<table_name>> <<partition_name_optional>> " 
    } 
    executeLoadQuery(){ 
    # hive -hiveconf table_name=$4 -hiveconf file_path=$2 -hiveconf db_name=$3 -e "select * from ${hiveconf:db_name}.${hiveconf:table_name}; " ; 
    echo dont See me 
    } 
    testfunc(){ 
    hive -hiveconf table_name="$3" -hiveconf db_name="$2" -e "LOAD data local inpath 'India1.txt' into table ${hiveconf.db_name}.${hiveconf.table_name}"; 
} 
    # $2 this will return true if the variable have a value 
    if [ ! $1 ] 
    then 
    usage 
    elif [ ! $2 ] 
    then 
    usage 
    else 
    echo "LODADING DATA"`enter code here` 
    testfunc 
    fi 

坏换人THIS IS MY sh文件,其用法显示在功能使用()Ubuntu的shell脚本:运行-hiveconf

我每次运行shell脚本时面临着这样的错误

test.sh: 14: test.sh: Bad substitution 
+0

sh test.sh主页/ gopal/DevanshHiveData/India1.txt mydb myparttab检查 – ambitiousdev111

回答

0

你必须逃避最后两个$个字符。它们有许多不同special meanings改变这一个行14:

hive -hiveconf table_name="$3" -hiveconf db_name="$2" -e 
"LOAD data local inpath 'India1.txt' into table \${hiveconf.db_name}.\${hiveconf.table_name}"; 

注意前两个$\字符。

+0

嘿谢谢!!!它的工作..你能告诉我在哪里可以读到这个..为什么这样做? – ambitiousdev111

+0

不客气:-)如果您在脚本中放置$符号,解释器会尝试“做些什么”(例如,使用'$ 1'获取第一个参数)。但在你的剧本中,你不希望发生这种情况。您只是想将字符串'$ {hiveconf ...'“按原样”传递给您要调用的配置单元脚本。这就是为什么你必须在美元之前放置一个转义字符。这样,解释器就不会尝试使用它。 –