运行bash脚本时获取Bash错误太多参数

时间:2017-04-25 11:10:54

标签: linux bash hdfs

我正在尝试编写目录中可用的一些基于逻辑的avro文件

但是我得到了太多的参数错误。

 [cloudera@client01 scripts]$ hdfs dfs -ls /user/cloudera/output_files/file_date_2017-04-06

Found 11 items
-rw-rw----   2 cloudera cloudera          0 2017-04-24 13:57 /user/cloudera/output_files/file_date_2017-04-05/_SUCCESS
-rw-rw----   2 cloudera cloudera     781714 2017-04-24 13:56 /user/cloudera/output_files/file_date_2017-04-05/part-r-00000-7e1d4e4e-9166-4744-b73b-095a7cc0e090.avro
-rw-rw----   2 cloudera cloudera     782132 2017-04-24 13:56 /user/cloudera/output_files/file_date_2017-04-05/part-r-00001-7e1d4e4e-9166-4744-b73b-095a7cc0e090.avro
-rw-rw----   2 cloudera cloudera     782467 2017-04-24 13:56 /user/cloudera/output_files/file_date_2017-04-05/part-r-00002-7e1d4e4e-9166-4744-b73b-095a7cc0e090.avro
-rw-rw----   2 cloudera cloudera     785117 2017-04-24 13:56 /user/cloudera/output_files/file_date_2017-04-05/part-r-00003-7e1d4e4e-9166-4744-b73b-095a7cc0e090.avro

当我应用以下if条件时,我得到以下错误。

[cloudera@client01 scripts]$ if [ hdfs dfs -test -e "/user/cloudera/output_files/file_date_2017-04-06/part*.avro" ];
> then
> echo "PASS"
>  else
> echo "FAIL"
>  fi
-bash: [: too many arguments
FAIL


[cloudera@client01 scripts]$ if [ hdfs dfs -test -e /user/cloudera/output_files/file_date_2017-04-06/part*.avro ]; then   echo "PASS";  else echo "FAIL";  fi
-bash: [: too many arguments
 FAIL
[cloudera@client01 scripts]$

我不知道我的if条件出了什么问题。 有人可以帮我解决这个错误。

2 个答案:

答案 0 :(得分:2)

你的代码应该是:

if
  hdfs dfs -test -e "/user/cloudera/output_files/file_date_2017-04-06/part*.avro"
then
  echo "PASS"
else
  echo "FAIL"
fi

请注意删除[]

if语句中的条件是一个命令,它将被视为" true"如果它的返回码是0,那么"假"否则。

test命令(通常在其[ ]形式中使用)是一个对其参数执行测试并返回true / false值的命令。它执行的测试并不倾向于将其内部内容作为命令执行。我建议你查一查,这非常有用。

但是,如果您只需要测试命令的成功/失败,则不需要它,只需使用命令本身作为条件。

答案 1 :(得分:0)

如果您想知道您的脚本成功运行,请尝试以下操作:

hdfs dfs -test -e "/user/cloudera/output_files/file_date_2017-04-06/part*.avro" && echo "PASS" || echo "FAIL"

或者您可以使用echo $?检查返回状态。 如果为零,则最后一个bash命令成功,其他任何操作都失败(这将是从脚本执行的最后一个命令返回到您检查$?的点的返回状态,其中包括 ANY bash命令,例如echo)。通常,您会发现您正在运行的任何命令(或POSIX man页面)的man页面将提供有关确切错误代码的更多信息。