ネストされた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.

そうでなく、ディレクトリが欠落している場合は、その事実を報告します(各ディレクトリに1つのディレクトリがありません)。

Fail: directory_name/etc

この場合、最終的に否定的な結果が返されます。

binこの機能は、サブディレクトリは存在しますがサブディレクトリはないディレクトリで実証されますasdf

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

ディレクトリ名が関数に固定されていないため、他のディレクトリのリストと一緒に使用できます。これには可変長のリストが含まれます。 (4つ、10、または1つのディレクトリのみを確認できます。)

私の答えが今後より良い質問をするのに役立つことを願っています。

関連情報