본문 바로가기
  • 오늘처럼
소프트웨어 아키텍처/Linux

Linux shell script : 입력값 검증과 help 문구

by bluefriday 2021. 9. 9.
반응형

쉘 프로그램 작성

vi 편집기 등을 이용하여 하단의 쉘 스크립트를 작성한다.

#!/bin/bash

declare -a CMDS
CMDS=(option_a option_b option_c)

function usage() {
  echo ""
  echo "USAGE: example.sh [$(IFS='|'; echo "${CMDS[*]}")]"
  echo ""
}

CMD=$1

if [[ " ${CMDS[@]} " =~ " $CMD " ]]
then
  echo ""
  echo "Valid command."
else
  echo ""
  echo "Invaid command: $CMD"
  usage
  exit 2
fi

function _function_a() {

  echo ""
  echo "option a -> Calls function_a."
  echo ""
}

function _function_b() {

  echo ""
  echo "option b -> Calls function_b."
  echo ""
}

function _function_c() {

  echo ""
  echo "option c -> Calls function_c."
  echo ""
}

case $CMD in
option_a)
  _function_a
  ;;
option_b)
  _function_b
  ;;
option_c)
  _function_c
  ;;
esac

 

코드 분석

먼저 declare 명령어를 통해 CMD 배열을 생성한 후에 옵션으로 받을 값들을 배열로 선언해준다. 첫번째 파라미터가 CMD 배열의 값 중 어느 값과도 일치하지 않을 경우 분기문을 통하여 usage 함수를 호출하고 에러(exit 2) 를 리턴하며 프로그램을 종료한다. 첫 번째 파라미터의 값이 CMD 배열의 값 중 하나와 일치할 경우 하단의 cas 문을 통해 옵션에 따른 함수를 각각 호출한 후에 프로그램을 종료한다.

쉘 프로그램을 수행할 때는 이와 같이 명령어에 대하여 usage 함수등을 통해서 help 문구를 출력해주면 사용성이 매우 증가하며 추후 유지보수에도 도움이 된다.

위 예제는 기본적인 템플릿에 가까운 쉘 프로그램으로 실제 사용할 경우 옵션의 종류, 파라미터, usage의 구문 등을 변경하여 활용하도록 하자. 명령어의 사용 예는 하단과 같다.

 

명령어의 사용 예

root@/:~/# ./example.sh
Invaid command:
USAGE: example.sh [option_a|option_b|option_c]

root@/:~/# ./example.sh option
Invaid command: option
USAGE: example.sh [option_a|option_b|option_c]

root@/:~/# ./example.sh option_a
Valid command.
option a -> Calls function_a.

root@/:~/# ./example.sh option_d
Invaid command: option_d
USAGE: example.sh [option_a|option_b|option_c]

root@/:~/#

 

 

 

댓글