본문 바로가기

TIL/개인공부

[Shell Script] 인자값 이쁘게(?) 받기

반응형

Shell Script관련 작업이 생겨서, 작업을하다 문득 인자값을 넣어주는부분이 생각보다 어려워서 기억하고자 해당 글을 작성합니다.

 

제일 먼저 사용방법에 대한 출력이 필요할때는 아래와같이 shell script함수를 선언하는게 좋을것같다.

usage(){
  cat <<EOF
Usage: get-code [-h|--help] [-s|--show]
Example: get-code resnet

Avaiable options:
-h, --help           Print this help and exit
-s, --show           Print downloadable model list

EOF
  exit
}

위와 같이 선언을하고 코드를 돌려보면 아래와같이 이쁘게(?) 출력된다

이쁘다! (?)

 

자 이제 본문에서 가장 중요한 shell script에서 이쁘게 인자값을 받는 방법이다. 아래와같이 코드를 작성하면 됩니다.

if [[ $# -eq 0 ]]
then
    usage
fi

while test $# -gt 0
do
  case "$1" in
    -s| --show)
      get_available_model
      echo "[INFO] Downloadable Model List => ${model_available_list[*]}"
      exit 0;;
    -h| --help)
      usage
      exit 0;;
    -*)
      echo "[ERROR] Invalid Argument"
      exit 1;;
  esac
  shift
done

코드에 대해 설명을 드리자면. 아래 코드는 "아무런 인자값을 안받았을때는 위에서 선언한 사용방법 함수를 출력해라" 라는 뜻입니다. 

if [[ $# -eq 0 ]]
then
    usage
fi

그 다음 함수는 인자값을 받는 코드인데, 인자값이 얼마나 길게 들어오는지는 모르니까 while문으로 모든 인자값을 계속 훑는방식으로 구현했습니다. 인자값의 이름정의는 -s | --show 방식으로 선언할수가있습니다. 또한, 우리가 정의하지않는 옵션값을 넣을경우엔 -* 라는 옵션을 넣어서 예외처리를 했습니다. 또한, 옵션명에 따른 옵션값을 보기위해서는 $2로 확인할수가 있습니다.

while test $# -gt 0
do
  case "$1" in # $1 현재 보고있는 옵션값의 의미, 해당 옵션값의 인자값을 보려면 $2 로 확인가능
    -s| --show)
      echo "[INFO] Downloadable List => ${available_list[*]}"
      exit 0;;
    -h| --help)
      usage
      exit 0;;
    -*) # 위에서 선언하지않은 옵션을 썻을 경우 예외처리
      echo "[ERROR] Invalid Argument"
      exit 1;;
  esac
  shift # 하나 인자값을 읽고 그 옆으로 이동
done

 

반응형