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(){…代码为固定的…}
。