shell script“语法错误:`done'意外”

evrscar2  于 2021-05-29  发布在  Hadoop
关注(0)|答案(1)|浏览(619)

我是linux 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\u row.sh。用法如下:

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

t1.csv基本上每行都包含一些表名。
我得到一个错误如下:

但我在这里借用的代码片段被标记为可接受的解决方案,大概它是正确编写的。那我还缺什么?非常感谢你。

jckbn6z7

jckbn6z71#

如果每个表名都在自己的行中,那么这是一个常规文本文件,而不是csv。
尝试不使用 eval ,而改为内联运行语句。


# !/bin/bash

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

如果你想更好地测试你的脚本,我建议 for 在硬编码的表列表上循环。

相关问题