2017-05-06 69 views
0

我是新來的Linux shell腳本,這裏是一個片段我要用:shell腳本「語法錯誤:`完成'意外。」

while IFS='' read -r line || [[ -n "$line" ]]; do 
echo "" 
echo "" 
echo "" 
echo "Counting the table : $line" 
eval "hive -e 'select count(*) from $line'" 
done < "$1" 

我將其命名爲count_row.sh。 這裏是用法:

$ ./count_row.sh t1.csv > row.txt 

t1.csv基本上包含了一些表的名稱每一行。

我得到了一個錯誤如下:

syntax error at line 7: `done' unexpected

但是我借這裏的片段被標記爲接受的解決方案,想必是正確寫入。那麼我在這裏錯過了什麼?非常感謝你。

+0

您在這裏使用'eval'的任何特定原因?它看起來不是必要的。 – ghoti

+0

你確定你正在執行與你的問題相同的代碼嗎?我複製粘貼到我的機器上的新腳本,它工作正常。 (我只需用'echo'替換'hive') –

+0

@shambalambala hive是我需要在hadoop中使用的命令來運行查詢並獲取表格的行數 – PasLeChoix

回答

1

順便說一句,如果你有自己的表中的每個表名,這是一個普通的文本文件,而不是一個csv

不過,儘量不要使用eval,而是直接運行語句。

#!/bin/bash 

while IFS= read -r line; do 
    echo "${line}: $(hive -e 'select count(*) from ${line}')" 
done < "$1" 

如果你想測試你的劇本好,我會建議一個for遍歷表的硬編碼列表。