2016-10-28 2 views
0

안녕하세요, 누군가 새로운 인수를 취하는 무한 루프를 도와주세요. 명령 줄과 같은 새 인수로 각 공백을 읽는 명령이 있습니까? 모든 것이 하나의 커다란 인자로 설정되어있는 것 같습니다.Bash While while 새 인수

나는 스크립트가 무한 루프에 들어가면 스크립트를 가지고 있습니다. 첫 번째 인수는 다른 스크립트를 호출 할 경우를 결정하고 두 번째 인수는 해당 스크립트로 전송됩니다. 그런 다음 다시 돌아가서 같은 줄에 두 개의 인수를 다시 묻습니다. 첫 번째 케이스를 결정하고 두 번째를 사용 ...

그러나 나는 그것이 명령 줄처럼 한 줄에 있어야합니다. 나는 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

"사용자에게 두 개의 인수를 묻습니다." 아래에 나열된 세 가지 방법이 있습니다. 나는 당신이 do 이후와 case 전에 넣고 싶다고 생각합니다. John1024 말했다 @처럼

  1. ,

    read choice second_arg 
    

    $choice$second_arg를 입력합니다. 을 직접 choice으로 사용하면 choice="$1"은 필요하지 않습니다.

  2. 이 순서 :

    read 
    set -- $REPLY 
    

    교체 할 $1, $2 ... 명령 행에서 단어. 그런 다음 가지고 계신 것처럼 choice="$1"을 계속 사용할 수 있습니다.

  3. 명령 줄 매개 변수를 유지하고 더 일반적인 수,
    read -a inputs 
    

    배열 inputs로 단어를 읽어, 그래서 당신이 그러나 많은 입력에 대해 ... ${inputs[0]}, ${inputs[1]}, 그들을 참조 할 수 있습니다하려면 아르. 그런 다음 대신

    choice="${inputs[0]}" 
    

    대신 사용할 수 있습니다.

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