2017-09-21 13 views
0

我只有一個條件需要檢查。我想在shell腳本中使用if-else構造。我如何寫它。大多數文檔顯示,該結構是做多方面這就是爲什麼他們使用IF構造中的語法問題:shell腳本

if []; then 
echo "do something" 
elif 
echo "somethingelse" 
else 
echo "something 2" 
fi 

但在我的情況下,我寫我的結構形式大致如下。它給出了語法問題。

#!/bin/sh 
hadoopFileList=`hadoop fs -ls /app/SmartAnalytics/Apps/service_request_transformed.db/sr_denorm_bug_details/ | sed '1d;s/ */ /g' | cut -d\ -f8` 
destination="/apps/phodisvc/creandoStaging" 

scpData() 
{ 
for file in $hadoopFileList 
do 
    echo $file 
    echo "copying file to the staging directory" 
    hadoop fs -copyToLocal $file $destination 
    sleep 2s 
    echo "deleting the file" 
    echo ${file##*/} 
done 
} 

if [[ -d "$destination" ]]; then 
#file exists copy data 
scpData() 
else 
#else create directory and copy data 
mkdir -p $destination 
scpData() 
fi 
+0

當目錄存在時,'mkdir -p'已經不成功(成功)。爲什麼你有'if'呢? –

+0

@DavisHerring的評論是爲了stackoverflow用戶而寫的。 – dataEnthusiast

+1

原因一:你不應該打電話給你用'()' 錯誤的函數:()''scpData權 :'scpData' 只有函數定義需要'()' –

回答

1

你不應該用()調用你的函數,只能定義它們。

錯誤:

myFunction() { 
echo "This line is from my Function" 
} 

myFunction() 

正確方法:

myFunction() { 
echo "This line is from my Function" 
} 

myFunction 
0

爲PS。提到,應該調用scpData之類的bash函數,而不使用()。 除此之外,您的if[];then ... else ... fi語法是正確的。因爲MKDIR的-p選項不檢查車況

if [ -d "$destination" ]; then 
    scpData 
else 
    mkdir -p $destination 
    scpData 
fi 

在這種特殊情況下,但是,如果環是沒有必要的, : 因此,你如果環將工作。 即,如果不存在,則它僅使目錄。 所以我重新寫你的,如果環(不使用的if-else-FI)如下:

mkdir -p $destination 
scpData 

它做同樣的事情!