2014-09-23 218 views
0

我不知道我的函數有什麼問題;它沒有正確返回值。Bash函數沒有正確返回值

function validate_directory_isempty  { 
    retval="" 

    NumOfFiles=`ls -l $input | egrep -c "^-"` 

    if [ "$NumOfFiles" == "0" ];then 
      retval=true 

    else 
      retval=false 

    fi 
    echo $retval 
} 


retval=$(validate_directory_isempty /opt/InstallationManager) 
echo "retval : " $retval 
if [ "$retval" == "true" ]; then 
     echo "" 
     echo "Installing Installation Manager" 

#  Install_IM 

else 
     echo "" 
     echo "DIRECTORY is not empty. Please make sure install location $DIRECTORY is empty before installing PRODUCT" 

fi 
+0

請記住以更正統的方式縮進您的代碼。起初你的代碼是不可讀的。突出顯示您的代碼並使用編輯框上方的** {} **按鈕將其縮進4個空格,但函數的主體不應縮進30多個空格。 – 2014-09-24 00:01:39

+0

變量'input'沒有在'validate_directory_isempty'中定義 – linuxfan 2014-09-24 00:02:53

+0

正如@linuxfan指出的那樣,'$ input'沒有在函數中定義。該函數的參數在'$ 1'等;你可能想用'「$ @」'替換'$ input'。還要注意''函數'符號不是首選; POSIX將使用'validate_directory_isempty(){...代碼作爲固定的...}'。 – 2014-09-24 00:04:22

回答

0

讓函數返回true或false的慣用方法是使用return關鍵字。返回值0表示成功,非零值表示失敗。另請注意,如果return不存在,函數將返回最後執行的命令的狀態。

我會寫你的函數類似這樣的

is_dir_empty() { 
    shopt -s nullglob 
    local -a files=("$1"/*) 
    ((${#files[@]} == 0)) 
} 

directory=/opt/InstallManager 
if is_dir_empty "$directory"; then 
    echo "$directory" is empty 
fi 

第一行設置一個shell選項,模式匹配沒有文件擴展爲空,而不是模式本身作爲一個字符串。

第二行用給定目錄中的文件名填充數組。

最後一行測試數組中元素的數量。如果零條目,返回成功,否則返回失敗。

0

我剛剛更換我的腳本如下,它的工作

去除下面的命令 RETVAL = $(validate_directory_isempty的/ opt/InstallationManager) 回聲 「RETVAL:」 $ RETVAL

添加 輸入=/opt/InstallationManager validate_directory_isempty

它工作。

再次感謝您的寶貴意見