쉘 스크립트

choko's avatar
Jun 29, 2024
쉘 스크립트
 
 
 

프롬프트 스트링(PS)

  • 쉘에서 사용자의 입력을 대기할 때 나타나는 문자로 4가지 종류가 있다.
  • PS1
    • 기본 프롬프트 스트링
    • 기본값은 [\u@\h \W]\$
  • PS2:
    • 긴 문자 입력을 위해 나타나는 문자열
    • 기본 값은 >
  • PS3
    • select 옵션을 처리할 때 나타나는 문자열
  • PS4
    • 실행을 디버깅할 때 출력되는 문자열
    • 기본값은 +
    •  
       

      프롬프트 스트링

      PS1 설정

    • PS1은 사용자의 입력을 대기할 때 [scott@home var]$와 같은 형태로 나오는 프롬프트이다.
    • PS1 변수를 전역 변수로 export 하여 색상 설정을 함께 하여 명령어 입력과 구분
      PS1을 설정할 때 특수기호를 이용하여 이름을 다이나믹하게 변경할 수 있다.
      PURPLE="\[\033[0;35m\]" WHITE="\[\033[1;37m\]" GREEN="\[\033[1;32m\]" NON_COLOR="\[\033[0m\]" export PS1="[$GREEN\u$WHITE@$PURPLE\h$WHITE \W]\$$NON_COLOR "
       
       

환경 설정

  • 배쉬쉘의 설정값을 설정하는 파일은 .bashrc와 .bash_profile 두 개가 있다.
    • 사용자가 로그인할 때 .bash_profile 파일을 호출하고, 이 파일에서 .bashrc 파일을 호출
    • 사용자 로그인시 호출 순서는 .bash_profile > .bashrc > /etc/bashrc 이다.
    • 보통 .bashrc 파일에 사용자가 필요한 alias나 환경 변수를 기록한다/
 

.bash_profile

.bash_profile 파일의 기본내용, 배쉬쉘 환경인지 확인하여 .bashrc파일을 호출한다.
if [ -n "$BASH" ] && [ -f ~/.bashrc ] && [ -r ~/.bashrc ];thensource ~/.bashrc fi

.bashrc

.bashrc 파일의 기본내용, 운영체제의 배쉬쉘 설정 파일을 확인하고 호출한다.
# Source global definitions if [ -f /etc/bashrc ];then . /etc/bashrc fi
 

특수 표현

전달 파라미터

Uppercase, Lowercase

문자열의 대문자화와 소문자화는 다음과 같이 처리한다.
#!/bin/bash str="abcd" echo${str^^}echo${str,,}

문자열 변경(replace)

vParam=a.b $echo${vParam/./_} a_b $echo${vParam//./_} a_b

매개 변수

  • 작성된 스크립트파일에 사용자가 전달하는 변수나 함수에 전달하는 변수를 매개변수라고 한다.
  • 전달된 매개변수는 공백으로 구분되어 전달한다.
    • 다음과 같이 사용하면 script.sh를 실행 할 때 a b c 세 개의 변수를 전달
# script.sh 파일에 a b c 변수 전달 $ script.sh a b c
이때 script.sh에서 해당 매개변수를 전달받을 때는 다음과 같이 사용합니다.
#!/bin/bash ## 스크립트 이름 - script.sh file_name=$0## 전체 파라미터 - a b c all_param=$* ## 파라미터 길이 - 3 param_length=$### 공백으로 구분된 파라미터 param1=$1 # a param2=$2 # b param3=$3 # c

종류

예제

# 현재 스크립트의 PID # 스크립트 파일안에서 현재 실행중인 프로세스의 PID를 알고 싶을 때 echo $$ # 마지막 실행의 종료 인자 # 결과가 0이면 이전 실행한 프로세스가 정상 종료이지만, 다른 값이면 오류 발생 echo $? # 이전 실행 명령어의 PID # nohup 으로 실행한 이전 명령어의 PID를 기록해 둘 수 있음 echo $!
 

쉘 스크립트 작성 Tip

1.명령어 실행결과를 변수에 할당

# 1.  $()를 이용하는 방법 $ A=$(date) $ echo $A Wed Apr 1 05:08:12 UTC 2020 # 2. `로 명령어를 감싸주는 방법 $ B=`date` $ echo $B Wed Apr 1 05:08:24 UTC 2020
 

2.백그라운드로 여러 명령을 실행하고 대기하는 방법

  • loop를 이용하여 한번에 여러 작업을 실행하는 경우, 작업 하나의 처리가 오래 걸리는 경우 loop를 이용하여 처리하는데 한번에 너무 많은 작업을 요청하면 문제가 될 수 있다.
    • 이럴 때 wait 커맨드를 이용한다.
#/bin/bash # 각 부분이 Tab으로 구분 vServices=("A B C D E F") IFS=$'\n' # 라인단위로 분리 vServices=($vServices) IFS=$'\t' # 공백을 기준으로 분리 for vServicein "${vServices[@]}" do arr=($vService) vParam1=${arr[0]} vParam2=${arr[1]} vParam3=${arr[2]} vFunc${vParam1} & vFunc${vParam2} & vFunc${vParam3} & wait # 위 3개의 작업이 끝날 때 까지 대기 done
Share article

Tom의 TIL 정리방