嵌套 if 语句有 4 个 if

嵌套 if 语句有 4 个 if

嗨,朋友们,你能帮我用嵌套的 if 语句重写该方法吗?非常感谢。

isDiskMounted()
{   
    if [ -d "/folder1" ] && [ -d "/folder2" ] && [ -d "/folder3" ] && [ -d "/folder4" ];then
        echo "true"
    else
        echo "false"
    fi
}

我尝试这样写;

    isDiskMounted()
    {
        if [ -d "/folder1" ]; then
        echo "/folder1 klasoru bulundu" 
            if [ -d "/folder2" ]; then
        echo "/folder2 klasoru bulundu"  
                if [ -d "/folder3" ]; then
        echo "/folder3 klasoru bulundu" 
                    if [ -d "/folder4" ]; then
        echo "/folder4 klasoru bulundu" 
fi 
fi 
fi  
    echo "true"
    else
    echo "false"    
            fi
    }

答案1

纯粹从代码审查的角度来看,我会这样编写该函数:

func()
{
    for d in /folder1 /folder2 /folder3 /folder4 ; do
        if ! [ -d "$d" ] ; then
            echo "$d does not exist (or is not a directory)"
            return 1
        fi
    done
    echo "all dirs exist"
}

该循环可能使向列表添加新目录或将它们作为参数传递给函数变得更加简单。

(但是,如果您的目标是检查某些内容是否已安装,就像函数名称所暗示的那样,那么测试目录是否存在并没有多大好处。)

答案2

为了帮助您了解您的尝试出了什么问题(并且您不会告诉我们什么失败了以及您期望什么,依靠我们猜测),我刚刚更改了代码的缩进,以反映执行路径的方式格式化它:

isDiskMounted()
{
    if [ -d "/folder1" ]; then
        echo "/folder1 klasoru bulundu" 
        if [ -d "/folder2" ]; then
            echo "/folder2 klasoru bulundu"  
            if [ -d "/folder3" ]; then
                echo "/folder3 klasoru bulundu" 
                if [ -d "/folder4" ]; then
                    echo "/folder4 klasoru bulundu" 
                fi 
            fi 
        fi  
        echo "true"
    else
        echo "false"    
    fi
}

答案3

你的问题太糟糕了,我忍不住参加这个比赛。

这是我对其解释的看法。

checkDirectories() {
    # a logical switch variable for "all directories positive"
    allOk=true
    # as long as there are some arguments
    while [ "$#" -gt 0 ]; do    
        # if not -d, report and change the all-switch
        [ ! -d "$1" ] && echo Fail: "$1" && allOk=false
        # get rid of the first function argument,
        # so that "$2" becomes the new "$1" 
        shift
    done
    # if all ok, report this. otherwise return negative. 
    $allOk && echo "All directories present." || return 1
}

该函数checkDirectories接受目录作为参数(在命令行、脚本等中)。不像一卡丘的一个,它不会返回第一个丢失的目录,但会遍历所有列表。如果所有目录都正常,会打印:

All directories present.

否则,如果缺少任何目录,它将报告这一事实(并且对于每个目录都缺少一个):

Fail: directory_name/etc

在这种情况下,最终将返回负结果。

bin现在在有子目录但没有子目录的目录中演示此功能asdf

$ checkDirectories bin asdf
Fail: asdf
$ echo $?
1
$ checkDirectories bin
All directories present.
$ echo $?
0

由于目录名称未硬连接到函数中,因此您可以将其与不同的目录列表一起使用。这包括可变长度的列表。 (因此您可以检查四个或十个目录,也可以只检查一个。)

希望我的回答能帮助您以后提出更好的问题。

相关内容