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
사용하거나 많은 에서 해당 옵션을 활성화한 경우 그 이상을 사용합니다 .*
?
[
extglob
bash