쉘 스크립트(Shell Script) 기초(3) - 인수, 함수, case

Ubuntu 14.04 LTS 환경을 기준으로 작성되었습니다.

인수 사용하기

쉘 스크립트에서 인수를 받는 방법은 크게 두 가지가 있다.

지정한 순서대로 인수 값 참조하기

#!/bin/bash
# params.sh

args1=$1  
args2=$2

if [ $# = 0 ]  
then  
  echo "인수가 업습니다"
elif [ $# = 1 ]  
then  
  echo "첫번째 인수는 $args1"
elif [ $# = 2 ]  
then  
  echo "첫번째 인수는 $args1"
  echo "두번째 인수는 $args2"
else  
  echo "인수는 2개 이하이어야 합니다"
fi


$ sh params.sh dog cat
첫번째 인수는 dog
두번째 인수는 cat

옵션 이름으로 인수 값 참조하기

#!/bin/bash
# options.sh

while getopts a:b:c: OPT  
do  
  case $OPT  in
    a) a="$OPTARG" ;;
    b) b="$OPTARG" ;;
    c) c="$OPTARG" ;;
  esac
done

if [ "$a" != "" ]  
then  
  echo "a 값은 $a"
fi  
if [ "$b" != "" ]  
then  
  echo "b 값은 $b"
fi  
if [ "$c" != "" ]  
then  
  echo "c 값은 $c"
fi  


$ sh options.sh -a dog -b cat -c lion
a 값은 dog  
b 값은 cat  
c 값은 lion  

함수

#!/bin/bash
# func.sh

main() {  
  hello Peter Tom Jack 
  hello
  if [ $? != 0 ]
  then
    echo "명령어 실패"
  fi
}

hello() {  
  people=$*
  if [ "$people" = "" ]
  then
    echo "인수가 없습니다."
    return 1
  fi
  for person in $people
  do
    echo "Hello, $person. Today is $(today)"
  done
}

today() {  
  date +%Y-%m-%d
}

main  


$ sh func.sh
Hello, Peter. Today is 2017-07-09  
Hello, Tom. Today is 2017-07-09  
Hello, Jack. Today is 2017-07-09  
인수가 없습니다.  
명령어 실패

case

case 문에서는 패턴에 따른 분기도 가능하다.

#!/bin/bash

birth_date=$1

case $birth_date in  
  921207)
    echo "저와 생일이 같으시군요!"
    ;;
  ??03??|??04??|??05??)
    echo "봄에 태어나셨군요!"
    ;;
  ??06??|??07??|??08??)
    echo "여름에 태어나셨군요!"
    ;;
  ??09??|??10??|??11??)
    echo "가을에 태어나셨군요!"
    ;;
  ??01??|??02??|??12??)
    echo "겨울에 태어나셨군요!"
    ;;
esac  

출처