2017-02-05 4 views
0

私はfirebaseまたはherokuにデプロイするスクリプトを用意しています。スクリプトの終わりに、余分なキーやスペルミスやファイアベースのスペルミスがあった場合は、希望のホストを入力してスクリプトを上からやり直してみてください。私はcase文の外にwhileループを入れてみました。私の望みは、スクリプトが最終的に*)に到達すると、希望のホストの入力を促し、スクリプトを先頭から起動して目的のホストにデプロイするということでした。デプロイするBashスクリプト

これは、スクリプトを実行する方法/方法が完全にわからないが、deploy herokuまたはdeploy firebaseとしてスクリプトを実行すると、文字通り、端末上で何も起こりません。私は"$?"の周りの引用符を試みて、exit 1を動かしましたが、まだ何もありません。どんな方向にも大変感謝しています。また、私はアイデアは、あなたが(trueのおかげで)停止したことがないループを持っているが、あなたの希望この

#!/bin/bash 

HOST=$1 
while true; do 
    case "$HOST" in 
    heroku) 
     git push heroku master 
     break 
     ;; 
    firebase) 
     firebase deploy 
     break 
     ;; 
    *) 
     read -p "You can only choose between Heroku and Firebase. " HOST            
     ;; 
    esac 
done 

を試してみてください

deploy <placetodeploy>

#!/bin/bash 

HOST=$1 

while [ $? -gt 0 ]; do 
    case "$HOST" in 
    heroku) 
     git push heroku master 
     ;; 
    firebase) 
     firebase deploy 
     ;; 
    *) 
     read -p "You can only choose between Heroku and Firebase. " HOST; exit 1               
     ;; 
    esac 
done 

答えて

2

を呼び出すことにより、端末でこのスクリプトを実行します入力はbreakステートメントになります。これはループの実行を中断させますが、catch-allのcaseステートメントはループの継続を許可します。

ループからCTRL-Cを外したくない場合は、ある種の「終了/キャンセル」オプションを追加することができます。

+0

ありがとう@Fred!私はあなたのアドバイスを受け取り、出口オプションを追加すると思います。さもなければ、私はサークルで周りを回っていただろう.... *スネアドラムのロール* – kyle

1

次のようにそれを行うための別の方法がある:Fred's answerに比べ

#!/bin/bash 

HOST=$1 

while [[ "$HOST" != "heroku" && "$HOST" != "firebase" ]] 
do 
    read -p "You can only choose between heroku and firebase. " HOST 
done 

case "$HOST" in 
heroku) 
echo git push heroku master 
;; 
firebase) 
echo firebase deploy 
;; 
esac 

欠点は、あなたが持っている場合ということであるのに対し、利点は、引数のチェックやスクリプトの本体が分離されているということですさらに多くのケースを追加するには、2か所で行う必要があります。