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
オプションを有効にした場合はそれ以上を使用します。*
?
[
extglob
bash