2017-08-18 22 views
1

私は非常に単純なBASHスクリプトを使用して、入力を希望するかどうかをユーザーに確認します。応答はyまたはnバッシュ入力を確認するか再入力する

と入力されています。nと入力すると、スクリプトが終了します。

yと入力すると、いくつか質問があります。最後に、入力を確認するように依頼したいと思います。

これが正しい場合は、質問に返信して情報を入力します。

は、これまでのところ私が持っている:

while true; do 
    echo -e "Enter details ? " 
    read yn 
    case $yn in 
     [Nn]*) exit;; 
     [Yy]*) 
      echo -e "description" 
      read desc 

      echo -e "Address" 
      read address 

     *) echo "Please answer yes or no.";; 
    esac 
done 

これは正常に動作するようですので、私は確認を追加しようとしました..しかし、働いていないthatsの。

while true; do 
    echo -e "Enter details ? " 
    read yn 
    case $yn in 
     [Nn]*) exit;; 
     [Yy]*) 
      echo -e "description" 
      read desc 

      echo -e "Address" 
      read address 

      echo -e "$desc - $address" 

      while true; do 
       echo -e "\nAre these details correct ? " 
       read conf 
       case $conf in 
        [Nn]*) // return to enter details // 
        [Yy]*) // carry on with the details entered // break;; 
       esac 
      done 


     *) echo "Please answer yes or no.";; 
    esac 
done 

ユーザがyを選択し、説明とアドレスを入力し、次のように目的があります。ページには、入力した内容の要約が表示され、are these details correct ?に移動してスクリプトが進行しているかどうかを尋ねます。入力が間違っていれば、スクリプトはそれを返して説明を入力し、次にアドレスを入力します。

誰かがこれを行う方法をアドバイスできますか? おかげ

答えて

1

あなたは1つの以上のループレベルを追加し、break [n]のオプションのレベルインジケータを使用することができます。このため

while true; do 
    echo -e "Enter details ? " 
    read yn 
    case $yn in 
     [Nn]*) exit;; 
     [Yy]*) 
      while true; do 
       echo -e "description" 
       read desc 

       echo -e "Address" 
       read address 

       echo -e "$desc - $address" 

       while true; do 
        echo -e "\nAre these details correct ? " 
        read conf 
        case $conf in 
         [Nn]*) break 1;; 
         [Yy]*) break 3;; 
        esac 
       done 
      done;; 
     *) echo "Please answer yes or no.";; 
    esac 
done 
使用しないでください
+0

おかげであなたはどこBREAK1&へ抜け出すBREAK3確認できました。 – Tom

+1

'break 1'は' break'と同じです:最も内側のループを終了します。 'break 3'は、この場合、最も外側のループを終了します。 –

+0

大変感謝しています... – Tom

0

case。あなたのために例えば スクリプト:あり

#!/bin/bash 

while true; do 
    echo -e "Enter details ?(y/n)" 
    read yn 
    if [[ $yn == "y" ]];then 
      echo -e "description" 
      read desc 

      echo -e "Address" 
      read address 

      echo -e "$desc - $address" 

      while true; do 
       echo -e "\nAre these details correct ? (y/n)" 
       read conf 
       if [[ $conf == "y" ]];then 
        echo "All done" 
        break 
       elif [[ $conf == "n" ]];then 
        break 
       else 
        continue 
       fi 
      done 
    elif [[ $yn == "n" ]];then 
     break 
    else 
     continue 
    fi 
0

あなたが行く:私の正気のため

DONE="" 
while [ "$DONE" != "true" ]; do 
    echo -e "Enter details ? " 
    read yn 
    case $yn in 
     [Nn]*) exit;; 
     [Yy]*) 
      echo -e "description" 
      read desc 

      echo -e "Address" 
      read address 

      echo -e "$desc - $address" 

      while true; do 
       echo -e "\nAre these details correct ? " 
       read conf 
       case $conf in 
        [Nn]*) 
         break;; 
        [Yy]*) 
         echo "doing something with your values" 
         DONE="true" 
         break;; 
       esac 
      done 
     ;; 


     *) echo "Please answer yes or no.";; 
    esac 
done 
関連する問題