2017-12-20 1 views
0

그 수 있습니다 :분할 문자열 조건부 내가 문자열을

(당신이 궁금하다면 그것은하는 MongoDB를 연결 문자열의)

> host
  • $userVar - ->user
  • $passVar ->pass
  • 다음 실행 user:[email protected]

    • $hostVar가 :

      사례 # 1 :

      나는 끝낼 필요 :

      ,210
      mongodump --host $host -u $user -p $pass ... 
      

      사례 # 2 : [email protected]

      • $hostVar ->host
      • $userVar ->user
      • $passVar - 다음> (비어 있음)

      그리고 실행

      mongodump --host $host -u $user ... 
      

      참고 : mongo에 대한 -p 매개 변수는 전달되지 않습니다.

      사례 # 3 : host

      • $hostVar ->host
      • $userVar -> (비어 있음)
      • $hostVar -> (비어 있음)

      그리고 실행

      mongodump --host $host ... 
      

      -u-p은 전달되지 않습니다. 그래서

      ...

      나는 때문에 매개 변수의 선택적인 특성 미친려고하고있다. 내 첫 번째 해결 방법은 고전이었습니다.

      user=$(echo $DBHOST | cut -d : -f 1) 
      pass=$(echo $DBHOST | cut -d : -f 2 | cut -d @ -f 1) 
      host=$(echo $DBHOST | cut -d : -f 2 | cut -d @ -f 2) 
      

      그러나 비트가 누락 된 경우이 문제는 완전히 해결되었습니다.

      :의 존재를 기반으로 조건부 구문 분석을 시도했지만 그 결과는 ... 여기에 표시하는 것이 당황 스럽습니다.

      두 번째 문제는 다음과 같습니다. "어쩌면"매개 변수를 조건없이 명령에 전달할 수 있습니까? hostParam="--host $host"과 같은 것을 입력 한 다음 $hostParam을 전달하면됩니까? 이것의

      ALL은 mongodump 때문에이 몽고의 연결 문자열을 지원하지 않습니다, 그리고 내가 할 것이다 내가 config 파일에서 보여준 형식의 설정 변수 ...

    답변

    1

    있습니다

    # $conn holds the connection string 
    
    # this array will contain the parameters 
    params=() 
    
    if [[ $conn =~ ^(.+):(.+)@(.+)$ ]]; then 
        params=(-u "${BASH_REMATCH[1]}" -p "${BASH_REMATCH[2]}" --host "${BASH_REMATCH[3]}") 
    elif [[ $conn =~ ^(.+)@(.+)$ ]]; then 
        params=(-u "${BASH_REMATCH[1]}" --host "${BASH_REMATCH[2]}") 
    else 
        params=(--host "$conn") 
    fi 
    
    # call the command 
    mongodump "${params[@]}" 
    
    +0

    을 예수의 배쉬는 내 시간이 지나면 진화 해왔다. 당신은 저에게 params [@]가 무엇인지 말해 줄 수 있습니까? 'BASH_REMATCH'는 마술입니다, 정말 좋아합니다! – Merc

    +0

    나는 그것이 "당신에게 감사하지 말라"는 것을 알고 있지만 ... 정말로 진지하게 감사드립니다. 놀라 울 정도로 간결하고 요점과 멋진 코딩. – Merc

    +0

    ''$ {params [@]}''는 배열'params'의 원소를 따옴표로 묶인 인자 목록으로 참조합니다. – tripleee