스크립트를 재개할지 확인하기 위해 스크립트 중간에 다음 코드가 있습니다.
read -r -p "Would you like to continue [Y/N] : " i
case $i in
[yY])
echo -e "Resuming the script";;
[nN])
echo -e "Skipped and exit script"
exit 1;;
*)
echo "Invalid Option"
;;
esac
입력 옵션이 유효하지 않은지 알 수 있는 방법이 있는지 궁금합니다. switch-case를 호출할 수 있는 방법이 있나요?
답변1
루프 입력. 사용자로부터 유효한 응답을 받으면 루프를 종료합니다 break
(또는 exit
경우에 따라).
while true; do
read -p 'Continue? yes/no: ' input
case $input in
[yY]*)
echo 'Continuing'
break
;;
[nN]*)
echo 'Ok, exiting'
exit 1
;;
*)
echo 'Invalid input' >&2
esac
done
유틸리티 기능:
ask_continue () {
while true; do
read -p 'Continue? yes/no: ' input
case $input in
[yY]*)
echo 'Continuing'
break
;;
[nN]*)
echo 'Ok, exiting'
exit 1
;;
*)
echo 'Invalid input' >&2
esac
done
}
EOF를 통한 종료를 허용하는 유틸리티 함수의 변형(예: 를 누르는 것 Ctrl+D):
ask_continue () {
while read -p 'Continue? yes/no: ' input; do
case $input in
[yY]*)
echo 'Continuing'
return
;;
[nN]*)
break
;;
*)
echo 'Invalid input' >&2
esac
done
echo 'Ok, exiting'
exit 1
}
루프에서 벗어나는 세 가지 방법이 있습니다.
- 사용자가 "yes"를 입력하면 함수가 반환됩니다.
- 사용자가 "no"를 입력하면
break
루프를 종료하고 을 실행합니다exit 1
. read
이 경우 입력 종료 또는 기타 오류로 인해 실패한 경우 실행됩니다exit 1
.
대신 사용자가 계속하기를 원하지 않을 때 수행할 작업을 호출자가 결정하도록 허용을 exit 1
사용할 수 있습니다 . return 1
호출 코드는 다음과 같습니다.
if ! ask_continue; then
# some cleanup, then exit
fi
답변2
그냥 다시 읽어보면 어떨까요?
unset i
while [[ ! "$i" =~ ^[yYnN]$ ]]; do read -r -p "Would you like to continue [Y/N] : " i; done
답변3
함수 내부에 스위치 케이스를 유지하면 됩니다.
function testCase ()
{
read -r -p "Would you like to continue [Y/N] : " i
case $i in
[yY])
echo -e "Resuming the script";;
[nN])
echo -e "Skipped and exit script"
exit 1;;
*)
echo "Invalid Option"
testCase
;;
esac
}
testCase
입력이 유효하지 않은 경우 유효한 입력을 얻을 때까지 함수를 호출합니다.
답변4
until [ "$i" = "0" ]
do
read -r -p "Would you like to continue [Y/N] : " i
case $i in
[yY])
echo -e "Resuming the script";;
[nN])
echo -e "Skipped and exit script"
exit 1;;
*)
echo "Invalid Option"
;;
esac
done