2017-04-25 77 views
1

而我想寫基於可用的Avro文件的一些邏輯目錄獲取猛砸錯誤的參數太多運行bash腳本

但我得到的參數太多錯誤。

[[email protected] 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 

當我申請下面的條件時,我得到以下錯誤。

[[email protected] 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 


[[email protected] 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 
[[email protected] scripts]$ 

我不知道在我的病情中出了什麼問題。 有人可以幫我解決這個錯誤。

回答

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語句中的條件是一條命令,如果其返回碼爲0,則它​​將被視爲「真」,否則將被視爲「真」。

test命令(通常用於其[ ]表單)是對其參數執行測試並返回true/false值的命令。它執行的測試不會將執行其內容的內容作爲命令執行。我建議你看看它,這是非常有用的。

但是,如果您只需測試命令的成功/失敗,則不需要它,只需使用命令本身作爲條件即可。

+0

是的。你是對的。謝謝很多 –

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頁面將提供有關確切錯誤代碼的更多信息。

+0

是的。你的建議工作..括號有道理..謝謝! –

+0

@Fred你是非常正確的,不知道我在那裏嘗試了什麼! - 刪除第二部分 –