このようにIfステートメントの中にifステートメントを入れることはできますか?

このようにIfステートメントの中にifステートメントを入れることはできますか?

ifステートメントの中にifステートメントを入れようとしています。スクリプトの最後のechoコマンドが印刷されなくなるまで機能しているようです。

テストのためにプロンプ​​トで入力した$ foldernameと同じ名前のディレクトリを作成しました。スクリプトの実行中にこれを入力します。スクリプトの実行中にディレクトリを上書きするオプションを選択しましたが、うまくいきました。しかし、なぜフォルダを置き換えた後、スクリプトが最後のechoステートメントに移動しないのか混乱しています。

echo "Folder $foldername has now been created"

これは、画面に印刷されず、スクリプトがifステートメント部分を終了しないことを示します。どんなアイデアがありますか?

#!/bin/bash
echo "Please input the folder name you would like to create then press ENTER"
read foldername

if [ -d "/home/location/test_directories/$foldername" ]
then
    echo "$foldername already exists"
    sleep 2
    echo
    echo
    echo "Do you want to overwrite this folder and start afresh?"
    read -p "Type Y overwrite the folder, or N to exit the script" -n 1 -r
    echo

    if [[ $REPLY =~ ^[Yy]$ ]]
    then
        echo "You have chosen to overwrite the folder $foldername"

        rm -rf /home/location/test_directories/$foldername; mkdir /home/location/test_directories/$foldername
        sleep 2
    else
        exit
    fi

    exit
else
    mkdir /home/location/test_directories/$foldername
fi

sleep 2
echo "Folder $foldername has now been created"

ベストアンサー1

はい、if好きなだけステートメントを入れ子にできます。

質問のコメントで指摘したように、コードの問題はこれら2つのexit文です。これらのいずれかをトリガーするブランチを選択すると、スクリプトは終了します。

私が知っている限り、両方のexitステートメントは重複して削除される可能性があります。

また、ユーザーが渡すすべての変数を二重引用符で囲む習慣を含める必要があります(たとえば、$foldernameフォルダ名をスペースとして扱うことができます)。

...改行文字、タブ、またはその他の「フィールド区切り文字」(変更された場合)を使用するか、(シェルの場合は特殊)を使用するか、多くの場合、そのIFSオプションを有効にした場合はそれ以上を使用します。*?[extglobbash

おすすめ記事