쉘 스크립트란(+deploy.sh)

devdo·2023년 3월 2일
0

Linux

목록 보기
4/5
post-thumbnail

쉘 스크립트란?

SHELL에서 사용할 수 있는 명령어들의 조합으로 모아서 만든 배치(Batch)파일이다.

운영체제의 Shell을 이용하여 순차적으로 읽으면서 명령어들을 실행시켜주는 인터프리터 방식의 프로그램이다.

리눅스 명령어들을 모아 놓은 ASCII text 파일
실행 permission을 할당해야 실행 가능


Shell이란?

  • 사용자 명령어 해석기
  • 사용자 프롬프트에 입력한 명령어를 해석해서 운영체제(kernel)에게 전달합니다.


Shell의 종류

1) Bourne shell(sh) - AT&T 벨 연구소의 스티븐 본(Stephen Bourne)이 개발한 Original shell

2) C Shell(csh, tcsh) - Bill Joy가 C언어의 기술을 넣어서 만든 Shell, C언어의 문법을 적용
History, aliases, job control, vi command editing and completion 기능을 포함

3) Korn shell(ksh) - David Korn이 AT&T에서 기존 bourne shell에 csh의 기능을 포함시켜 생성

4) Bourne-again shell(bash) - GNU Project로 만들어졌고, csh, ksh이 가진 기능을 포함하면서 bourne shell과 호환성을 많이 높이 shell로 리눅스, MAC OS의 기본 shell이고 윈도우에서도 사용가능

5) zsh - macOS에서 사용하는 쉘로 유명함(물론 zsh도 window에서도 사용가능), zsh는 bash보다 일부 기능에서 더 나은 성능을 제공


Shell 명령어

Shell 확인

# 사용 가능한 shell 리스트 확인하기
$ cat /etc/shells

# 현재 작업 shell 확인
$ echo $SHELL

# 로그인 Shell 변경
$ cat /etc/password
$ chsh

Shell 변수

$ fname=dsg

$ echo $fname
// dsg 

Shell 환경변수

  • 동작되는 프로그램에서 영향을 주는 변수
  • 환경 변수 선언: expert varName=value
 $ export NAME=dsg
 $ export $NAME
  • 시스템에 적용된 환경 변수 확인: env

    $ env
  • 기억해야 할 환경변수

    PATH : 명령어 탐색경로
    HOME : 홈디렉토리의경로. cd 명령 실행시 적용
    USER : 로그인 사용자 이름
    SHELL : 로그인 shell의 이름

💖 환경변수 영구 적용

export를 사용해 환경변수를 넣어주는 방법은 일시적인 방법이다. 시스템을 재부팅하거나, 다음에 다시 로그인하면 환경변수는 사라져 있을 것이다.
영구적으로 모든 사용자가 계속 사용할 수 있는 환경변수를 적용하고자 하면 ,
/etc/bash.bashrc 파일 수정
/etc/bash.bashrc 파일 마지막에 export NAME=dsg 와 같은 식으로 적어주면 되겠다.


예시

대표적인 예시를 보면, 톰켓에 대한 배치파일이 있는데

일반적으로 톰켓을 사용하는 방식은 IDE에 톰켓을 설정하거나
Spring Boot의 내장톰켓을 사용한다. 하지만 이것 이외에 cmd를 통하여 톰켓의 실행 배치파일을 실행하면 된다.

#!/bin/bash : 스크립트를 실행할 sub shell 이름


코드

# 실행권한을 줘야 한다.
sudo chmod +x test.sh

test.sh

#!/bin/bash  

echo "=========================="
echo "Today is $(date)"
echo "=========================="
df -h 

test2.sh

#!/bin/bash

if ! [ -d bak ]; then
    echo "bak 폴더를 생성합니다."
    mkdir bak
fi
cp *.log bak
echo "log파일 백업 완료."
# 실행을 주기 위해 권한 주기
$ chmod +x test.sh
# 실행
$ ./test.sh

✳️ deploy.sh

#!/usr/bin/env bash

REPOSITORY=/home/ec2-user/cicdproject
cd $REPOSITORY

APP_NAME=cicdproject
JAR_NAME=$(ls $REPOSITORY/build/libs/ | grep 'SNAPSHOT.jar' | tail -n 1)
JAR_PATH=$REPOSITORY/build/libs/$JAR_NAME

CURRENT_PID=$(pgrep -f $APP_NAME)

if [ -z $CURRENT_PID ]
then
  echo "> 종료할것 없음."
else
  echo "> kill -9 $CURRENT_PID"
  kill -15 $CURRENT_PID
  sleep 5
fi

echo "> $JAR_PATH 배포"
nohup java -jar $JAR_PATH > /dev/null 2> /dev/null < /dev/null &


참고

profile
배운 것을 기록합니다.

0개의 댓글