중첩된 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

디렉토리 이름이 함수에 고정되어 있지 않기 때문에 다른 디렉토리 목록과 함께 사용할 수 있습니다. 여기에는 가변 길이 목록이 포함됩니다. (그래서 디렉토리 4개, 10개 또는 하나만 확인할 수도 있습니다.)

제 답변이 앞으로 더 나은 질문을 하시는 데 도움이 되기를 바랍니다.

관련 정보