Cシェルのスクリプトは最後のelseステートメントをスキップします。

Cシェルのスクリプトは最後のelseステートメントをスキップします。

これは、引数の数とファイル/ディレクトリの存在を確認するCシェルスクリプトです。パラメータが有効な場合は、最後のelse文に移動して「hi」を印刷する必要がありますが、正しいパラメータを使用してこのスクリプトを実行すると、何も印刷されません。 (ただし、終了ステータスは 0 です。)
無効なパラメータがあると、他のすべてが正常に動作します。

if ($#argv != 2) then
        echo "Two arguments required"
else
        if (! -f $argv[1]) then
                echo "File does not exist"
                exit 1
        else
                if (! -d $argv[2]) then
                        echo "Not a valid directory"
                        exit 2
                endif
        endif
else    
        echo "hi"
endif

たぶん私の構文が間違っているかもしれませんか?どんなアイデアがありますか?

答え1

elseelseすでにこのケースがあるため、このケースに連絡することはできませんif。達成したいことは、次のことで行うことができます。

if ($#argv != 2) then
    echo "Two arguments required"
    exit 1
else if (! -f $argv[1]) then
    echo "File does not exist"
    exit 1
else if (! -d $argv[2]) then
    echo "Not a valid directory"
    exit 2
endif

echo "hi"

関連情報