私は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
スクリプトは、ユーザーから有効な応答を受け取る必要があると主張します(ユーザーがこれらの2文字(大文字または小文字)のいずれかで始まる単語を提供しない場合は、再度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
コードを入力すると、エラーメッセージと「確認してください」メッセージの両方を印刷したいようです。したがって、ユーザーがで始まる単語を入力すると、これら2つのメッセージが出力されますn
。
「PLEASE CHECK」メッセージが常に出力されるようにするには、その行printf
をスクリプトの最後に移動します。
答え2
互換性のある方法で実行できます。
if [ "${RSPN}" = "Y" ] || [ "${RSPN}" = "y" ]
または最近のbashを使用している場合:
if [ "${RSPN^}" = "Y" ]