본문 바로가기

서버 | OS/Linux - Shell Script

쉘스크립트의 명령행 인자를 파싱하는 방법

일반적으로 쉘 스크립트를 만들 때 플래그 인자 값을 전달받아 처리하는 루틴을 구현하고자 하는 경우 getopt 나 getopts를 이용하는 경우가 많다.

여기서는, 또 다른 방법으로 for loop 와 case 를 이용해서 플래그 인자 값을 분류하고 처리하는 루틴을 구현하는 방법으로써 쉘 스크립트 개발에 getopt 나 getopts 에 친숙하지 않은 개발자에게 손쉽게 응용 가능할 것이라 생각되는 루틴이어서 발췌한다.

### pivpn.io 의 설치 스크립트로 부터 발췌한 파싱 방법은 아래와 같음.

  # Check arguments for the undocumented flags
  for ((i = 1; i <= "$#"; i++)); do
    j="$((i + 1))"

    case "${!i}" in
      "--skip-space-check")
        skipSpaceCheck=true
        ;;
      "--unattended")
        runUnattended=true
        unattendedConfig="${!j}"
        ;;
      "--reconfigure")
        reconfigure=true
        ;;
      "--show-unsupported-nics")
        showUnsupportedNICs=true
        ;;
      "--giturl")
        pivpnGitUrl="${!j}"
        ;;
      "--gitbranch")
        pivpnGitBranch="${!j}"
        ;;
      "--noipv6")
        pivpnforceipv6=0
        pivpnenableipv6=0
        pivpnforceipv6route=0
        ;;
      "--ignoreipv6leak")
        pivpnforceipv6route=0
        ;;
    esac
  done