IF-ELSE - A resposta Y | N não funciona conforme necessário

0

Estou apenas achando difícil alcançar abaixo usando for-loop. Suas sugestões / ajuda serão muito apreciadas. Obrigado

  1. Se o usuário responder em maiúsculas ou minúsculas, ele deverá aceitar e converter em maiúsculas.
  2. Quando tento fornecer outro loop if para a resposta "N", ele não toca nesse loop, em vez disso, dá o erro do primeiro loop (condição 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
###############################################################

saída --- >

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.
    
por Mohammeddba 21.05.2018 / 14:07

2 respostas

2

O seguinte script /bin/sh insiste em obter uma resposta válida do usuário (ele perguntará novamente se o usuário não fornecer uma y ou uma n ou uma palavra que comece com uma dessas duas letras, maiúsculas ou minúsculas).

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

Se o usuário inserir N em seu código, parece que você deseja que a mensagem de erro e a mensagem "VERIFIQUE POR FAVOR" sejam impressas. É por isso que eu envio ambas as mensagens quando o usuário digita uma palavra que começa com n .

Se você deseja que a mensagem "VERIFIQUE POR FAVOR" seja sempre enviada, mova a linha printf até o final do script.

    
por 21.05.2018 / 16:50
0

Você pode fazer isso da maneira compatível

if [ "${RSPN}" = "Y" ] || [ "${RSPN}" = "y" ]

ou se você estiver usando uma recente bash de qualquer maneira:

if [ "${RSPN^}" = "Y" ]
    
por 21.05.2018 / 15:58