프롬프트 스트링(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