이렇게 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원하는 만큼 문을 중첩할 수 있습니다.

질문 의견에서 지적했듯이 코드의 문제는 이 두 exit문장입니다. 이들 중 하나를 트리거하는 분기를 선택하면 스크립트가 종료됩니다.

내가 아는 한, 두 exit진술 모두 중복되어 삭제될 수 있습니다.

또한 사용자가 전달하는 모든 변수를 큰따옴표로 묶는 습관을 들여야 합니다(예: $foldername이 경우 폴더 이름을 공백으로 처리할 수 있음).

...개행 문자, 탭 또는 기타 "필드 구분 기호"(수정한 경우)를 사용하거나 , ( 쉘의 경우 특수)를 IFS사용하거나 많은 에서 해당 옵션을 활성화한 경우 그 이상을 사용합니다 .*?[extglobbash

관련 정보