방금 for 루프를 사용하여 다음을 달성하는 것이 어렵다는 것을 알았습니다. 귀하의 조언이나 도움을 주시면 감사하겠습니다. 감사해요
- 사용자가 대문자나 소문자로 응답하면 수락하고 대문자로 변환해야 합니다.
- "N" 응답에 대해 또 다른 if 루프를 제공하려고 하면 해당 루프를 건드리지 않지만 첫 번째 루프(ELSE 조건) 자체에서 오류가 발생합니다.
echo -n "IS THIS A PRODUCTION DATABASE. PLEASE RESPOND Y|N :- "
read RESPONSE
RSPN=$RESPONSE
if [ "${RSPN}" = "Y" ]
then
print "\n"
echo -n "PLEASE ENSURE A 7 YEARS RETENTION RMAN_FULL BACKUP TAKEN for $DBTD"
print "\n"
else
echo "ERROR: Cannot proceed as 7 Years backup not yet TAKEN for PRODUCTION database. Please take a 7 Years Retention backup and re-run the script again."
exit 1
print "\n"
fi
###############################################################
if [ "${RSPN}" = "N" ]
then
print "\n"
echo -n "PLEASE CHECK IF BACKUP IS REQUIRED BEFORE DECOMMISSIONING $DBTD
print "\n"
fi
###############################################################
출력 --->
IS THIS A PRODUCTION DATABASE. PLEASE RESPOND Y|N :- N
ERROR: Cannot proceed as 7 Years backup not yet TAKEN for PRODUCTION database. Please take a 7 Years Retention backup and re-run the script again.
답변1
다음 /bin/sh
스크립트는 사용자로부터 유효한 응답을 받아야 한다고 주장합니다(사용자가 이 두 문자(대문자 또는 소문자) 중 하나로 시작하는 단어를 제공하지 않으면 y
다시 묻습니다).n
while true; do
printf 'IS THIS A PRODUCTION DATABASE? [y/n]: '
read response
case "$response" in
[Yy]*)
printf 'PLEASE ENSURE A 7 YEARS RETENTION RMAN_FULL BACKUP TAKEN for %s\n' "$DBTD"
break
;;
[Nn]*)
printf 'ERROR: Cannot proceed as 7 Years backup not yet TAKEN for PRODUCTION database. Please take a 7 Years Retention backup and re-run the script again.\n'
printf 'PLEASE CHECK IF BACKUP IS REQUIRED BEFORE DECOMMISSIONING %s\n' "$DBTD"
break
;;
*) printf 'Invalid response "%s"\n' "$response"
esac
done
사용자가 N
코드를 입력하면 오류 메시지와 "확인하세요" 메시지를 모두 인쇄하려는 것 같습니다. 그래서 사용자가 로 시작하는 단어를 입력하면 이 두 메시지를 출력합니다 n
.
"PLEASE CHECK" 메시지가 항상 출력되도록 하려면 printf
해당 줄을 스크립트 끝으로 이동하면 됩니다.
답변2
호환되는 방식으로 수행할 수 있습니다.
if [ "${RSPN}" = "Y" ] || [ "${RSPN}" = "y" ]
또는 최근 bash를 사용하는 경우:
if [ "${RSPN^}" = "Y" ]