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

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

我是linux shell脚本新手,下面是我想使用的代码片段:

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

我把它命名为count\u row.sh。用法如下:

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

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

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

jckbn6z7

jckbn6z71#

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

  1. # !/bin/bash
  2. while IFS= read -r line; do
  3. echo "${line}: $(hive -e 'select count(*) from ${line}')"
  4. done < "$1"

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

相关问题