프롬프트 스트링(PS)환경 설정.bash_profile.bashrc특수 표현전달 파라미터Uppercase, Lowercase문자열 변경(replace)매개 변수종류예제쉘 스크립트 작성 Tip1.명령어 실행결과를 변수에 할당2.백그라운드로 여러 명령을 실행하고 대기하는 방법
프롬프트 스트링(PS)
- 쉘에서 사용자의 입력을 대기할 때 나타나는 문자로 4가지 종류가 있다.
- PS1
- 기본 프롬프트 스트링
- 기본값은
[\u@\h \W]\$
- PS2:
- 긴 문자 입력을 위해 나타나는 문자열
- 기본 값은
>
- PS3
- select 옵션을 처리할 때 나타나는 문자열
- PS4
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