SHELL에서 사용할 수 있는 shell 명령어들의 조합으로 모아서 만든 배치(Batch)파일
이다.
운영체제의 Shell을 이용하여 순차적으로 읽으면서 명령어들을 실행시켜주는 인터프리터
방식의 프로그램이다.
리눅스 명령어들을 모아 놓은 ASCII text 파일
실행 permission을 할당해야 실행 가능
사용자 명령어 해석기
사용자 프롬프트에 입력한 명령어를 해석해서 운영체제(kernel)에게 전달합니다.
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이고 Winodw에서도 사용가능(git bash)
5) zsh
- macOS에서 사용하는 쉘로 유명함(물론 zsh도 window에서도 사용가능), zsh는 bash보다 일부 기능에서 더 나은 성능을 제공
# 사용 가능한 shell 리스트 확인하기
$ cat /etc/shells
# 현재 작업 shell 확인
$ echo $SHELL
# 로그인 Shell 변경
$ cat /etc/password
$ chsh
$ fname=dsg
$ echo $fname
// dsg
$ export NAME=dsg
$ export $NAME
시스템에 적용된 환경 변수 확인: env
$ env
기억해야 할 환경변수
PATH : 명령어 탐색경로
HOME : 홈디렉토리의경로. cd 명령 실행시 적용
USER : 로그인 사용자 이름
SHELL : 로그인 shell의 이름
💖 환경변수 영구 적용
export를 사용해 환경변수를 넣어주는 방법은 일시적인 방법이다. 시스템을 재부팅하거나, 다음에 다시 로그인하면 환경변수는 사라져 있을 것이다.
영구적으로 모든 사용자가 계속 사용할 수 있는 환경변수를 적용하고자 하면 ,
/etc/bash.bashrc 파일 수정
/etc/bash.bashrc 파일 마지막에 export NAME=dsg 와 같은 식으로 적어주면 되겠다.
쉘 스크립트 파일은 .sh 확장자를 사용
대표적인 예시를 보면, 톰켓에 대한 배치파일
이 있는데
일반적으로 톰켓을 사용하는 방식은 IDE에 톰켓을 설정하거나
Spring Boot의 내장톰켓을 사용한다. 하지만 이것 이외에 cmd를 통하여 톰켓의 실행 배치파일을 실행하면 된다.
#!/bin/bash
: 스크립트를 실행할 sub shell 이름
# 실행권한을 줘야 한다.
sudo chmod +x test.sh
# 쉘 스크립트 실행
./test.sh
test0.sh
# 주석은 '#'으로 시작합니다
#!/bin/bash
name="John"
echo "Hello, $name"
test.sh
#!/bin/bash
echo "=========================="
echo "Today is $(date)"
echo "=========================="
df -h
#!/bin/bash
if ! [ -d bak ]; then
echo "bak 폴더를 생성합니다."
mkdir bak
fi
cp *.log bak
echo "log파일 백업 완료."
#!/bin/bash
for i in {1..5}
do
echo "Number $i"
done
#!/bin/bash
my_function() {
echo "Hello from function"
}
my_function
#!/bin/bash
echo "First argument: $1"
echo "Second argument: $2"
./script.sh arg1 arg2
#!/bin/bash
command_that_may_fail
if [ $? -eq 0 ]; then
echo "Command succeeded"
else
echo "Command failed"
fi
#!/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 &