2016-10-28 17 views
0

こんにちは誰かが新しい議論をする無限ループを手伝ってくれますか? コマンドラインのような新しい引数としての各スペースには読み取りコマンドがありますか?すべてがそれを1つの大きな引数に設定しているようです。Bash Whileループの新しい引数

私はスクリプトが無限ループに入ったときにスクリプトを持っています。 最初の引数は別のスクリプトを呼び出す場合を決定し、2番目の引数はそのスクリプトに送信されます。 私は再度ループして、同じ行に2つの引数をもう一度尋ねます。最初に大文字と小文字を区別して使用します...

しかし、私はコマンドラインのようにこれらを1行に入れたいと思います。 私はreadコマンドが$ 1と$ 2をやり直したいときに、行全体を変数に設定すると思います。

私は基本的に、コマンドライン引数のように分割されます読み出しコマンドを必要とし、事前に

をありがとう、私の問題を説明するために少しのコードを提供します。

while true : 
do 

     # make decision using case..in..esac 
     choice = $1 
     case $choice in 
       create) 

         ./create.sh $2 
         ;; 
       add) 
         ./add.sh $2  

         ;; 
        *) 
         echo "Error: Invalid option..." 
         ;; 
     esac 
done 
+1

まず、コードをshellcheck.netで確認してください。 – chepner

+0

コードを更新し、shellcheck.netから警告を削除しました –

+3

@AshutoshJindalこの問題のコードを変更して、OPが実際に使用するものとは異なる動作にしましたか? – melpomene

答えて

2

"2つの引数をユーザーに求めてください"下記の3つの方法があります。 doの後で、caseの前にこれらのいずれかを入れたいと思います。 John1024 @同様

  1. read choice second_arg 
    

    $choice$second_argに記入します、と述べました。 を直接choiceに変更すると、choice="$1"は必要ありません。

  2. このシーケンス:

    read 
    set -- $REPLY 
    

    は、コマンドラインからの言葉で...、$1$2に置き換えられます。その後、あなたはそれを持っているようにまだchoice="$1"を使用することができます。そこしかし、多くの入力のために

    read -a inputs 
    

    が配列inputsに言葉を読みますので、あなたが${inputs[0]}としてそれらを参照することができ、${inputs[1]}、...、コマンドラインパラメータを維持し、より一般的には

  3. あります。その後、

    choice="${inputs[0]}" 
    

    ではなくchoice="$1"を使用できます。

0

希望します。

while true : 
do 
    echo -n "Enter Your Choice > " 
    read text 

    arg1=$(echo "$text" | awk '{print $1}') 
    arg2=$(echo "$text" | awk '{print $2}') 
    # make decision using case..in..esac 
    choice="$arg1" 
    case $choice in 
      create) 

        ./create.sh $arg2 
        ;; 
      add) 
        ./add.sh $arg2  
        ;; 
       *) 
        echo "Error: Invalid option..." 
        ;; 
    esac 
done 
関連する問題