Shell Bash函数未正确返回值

Shell Bash函数未正确返回值,shell,unix,scripting,Shell,Unix,Scripting,我不知道我的功能出了什么问题;它没有正确返回值 function validate_directory_isempty { retval="" NumOfFiles=`ls -l $input | egrep -c "^-"` if [ "$NumOfFiles" == "0" ];then retval=true else retval=false fi echo $retval }

我不知道我的功能出了什么问题;它没有正确返回值

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

让函数返回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选项,使不匹配任何文件的模式扩展为null,而不是将模式本身作为字符串

第二行用给定目录中的文件名填充数组


最后一行测试数组中的元素数。如果条目为零,则返回成功,否则返回失败。

我只是按照下面的方式替换了我的脚本,它工作了

删除了以下命令 retval=$(验证目录为空/opt/InstallationManager) echo“retval:$retval

增加 输入=/opt/InstallationManager 验证目录为空

它成功了


再次感谢您宝贵的输入

请记住以更正统的方式缩进代码。你的代码一开始是不可读的。突出显示您的代码,并使用编辑框上方的
{}
按钮将其缩进4个空格,但函数体不应缩进30多个空格。变量
input
未在
validate\u目录中定义,正如@linuxfan指出的,
$input
未在函数中定义。函数的参数在
$1
等中;您可能希望将
$input
替换为
“$@”
。还要注意,
函数
符号不是首选符号;POSIX将使用
validate\u directory\u isempty(){…代码为固定的…}