2017-05-06 71 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遍历表的硬编码列表。