我正在尝试编写目录中可用的一些基于逻辑的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条件出了什么问题。 有人可以帮我解决这个错误。
答案 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
页面将提供有关确切错误代码的更多信息。