2014-09-23 160 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

它工作。

再次感谢您的宝贵意见