2011-12-16 6 views
2

./script [-dph] [-peh] 첫 번째 인수는 프로덕션으로 실행해야 하는지를 스크립트에 알려줍니다 스크립트 또는 개발 스크립트를 사용합니다. 두 번째 인수는 스크립트에 생성 된 보고서의 출력을 전자 메일로 보내야하는지 아니면 html 페이지로 리디렉션해야 하는지를 알려줍니다.bash 여러 개의 명령 행 인수가 서로 종속 됨

getopts를 사용할 때 하나의 옵션과 관련된 옵션이 제공됩니다.

while getopts "dph" opt_name 
do 
    case "$opt_name" in 
     h) 
      helpText 
      exit 1 
      ;; 
     d) 
      #Use Dev env 
      ;; 
     p) 
      #Use Prod env 
      ;; 
     *) 
      echo "Wrong command line argument. Exiting..."; 
      exit 1 
      ;; 
    esac 
done 

두 번째 인수가 첫 번째 인수를 기준으로 다른 동작을 나타내는 두 가지 옵션을 사용하면 어떻게됩니까?

P.S. : dev 및 prod env에 대한 옵션을 사용하는 것이 최선의 해결책이 아니라는 것을 알아 두십시오. 그러나 내 응용 프로그램은 개념 단계의 증거이므로 여기에 내가 알고있는 것을 사용하고 있습니다.

답변

0

간단한 해결책 : 개발/제작 플래그 (예 : 대문자 D 및 P)에 다른 글자를 사용하십시오.

복합 솔루션 : p) 아래에서 환경이 결정되었는지 확인하십시오. 그렇다면 두 번째 의미를 사용하십시오. 그렇지 않은 경우 환경을 프로덕션 환경으로 설정하십시오.

2

이것은 아마도 가장 우아한 해결책은 아니지만 더 나은 접근 방법을 찾아내는 것이 기쁠 것입니다.하지만 작동하고 명확한 것은 무엇인지 알기 쉽습니다.

getopts 부분에서 명령 줄 옵션을 구문 분석하고 변수에 할당합니다. 두 번째 부분에서는 cli 옵션 종속성을 제어하고 제어 구조에서 작업을 직접 실행할 수 있습니다.

#!/bin/bash 

while getopts "DPehp" opt_name 
do 
    case "$opt_name" in 
     h) 
      helpText 
      exit 1 
      ;; 
     D) 
      #Use Dev env 
      dev=true 
      ;; 
     P) 
      #Use Prod env 
      prod=true 
      ;; 
     p) 
      p=true 
      ;; 
     e) 
      e=true 
      ;; 
     *) 
      echo "Wrong command line argument. Exiting..."; 
      exit 1 
      ;; 
    esac 
done 

if [[ $dev == true && $prod == true ]] || [[ $dev != true && $prod != true ]] 
then 
    echo "You must choose between development (-D) or production (-P) scripts" 
    exit 
fi 

if [[ $dev == true ]] 
then 
    if [[ $p == true ]] 
    then 
     echo "Your 'p' dev action goes here" 
    fi 
    if [[ $e == true ]] 
    then 
     echo "Your 'e' dev action goes here" 
    fi 
elif [[ $prod == true ]] 
then 
    if [[ $p == true ]] 
    then 
     echo "Your 'p' prod action goes here" 
    fi 
    # and so on fi 
fi 
관련 문제