Bash Shell
CentOS의 기본 쉘은 Bash(Bourne Again SHell : “배쉬 쉘”)
Bash Shell의 특징
-
Alias 기능(명령어 단축 기능)
-
History 기능(↑/↓)
-
연산 기능
-
Job Control 기능
-
자동 이름 완성 기능(Tab키)
-
프롬프트 제어 기능
-
명령 편집 기능
Shell의 명령문 처리 방법
-
(프롬프트) 명령어 [옵션…] [인자…]
-
예) # rm -rf /sun
환경 변수
echo $환경변수이름
으로 확인 가능
export 환경변수=값
으로 환경 변수의 값 변경 가능 - 단, 로그인 세션에서만 유지
주요 환경 변수
환경 변수 |
설명 |
예 |
HOME |
현재 사용자의 홈 디렉토리 |
/home/sun |
LANG |
현재 지원되는 언어 |
ko_KR.UTF-8 |
TERM |
로그인 터미널 타입 |
xterm |
USER |
현재 사용자 이름 |
sun |
COLUMNS |
현재 터미널의 컬럼 수 |
80 |
PS1 |
1차 명령 프롬프트 변수 |
[\u@\h \W]\$ |
BASH |
bash 셀의 경로 |
/bin/bash |
HISTFILE |
히스토리 파일 경로 |
/home/sun/.bash_history |
HOSTNAME |
호스트의 이름 |
localhost.localdomain |
LOGNAME |
로그인 이름 |
sun |
MAIL |
메일 보관 경로 |
/var/spool/mail/sun |
PATH |
실행 파일을 찾는 디렉터리 경로 |
/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/sun/.local/bin:/home/sun/bin |
PWD |
사용자의 현재 작업 디렉터리 |
/home/sun |
SHELL |
로그인해서 사용중인 쉘 |
/bin/bash |
LINES |
현재 터미널 라인 수 |
24 |
PS2 |
2차 명령 프롬프트(대개 > ) |
> |
BASH_VERSION |
bash 버전 |
4.2.46(2)-release |
HISTSIZE |
히스토리 파일에 저장되는 개수 |
1000 |
OSTYPE |
운영체제 타입 |
linux-gnu |
쉘 스크립트 프로그래밍 특징
쉘 스크립트의 작성과 실행
작성시
작성 내용
- 첫줄 #!/bin/sh → 사용할 언어 선택(sh 쉘)
실행 방법 1. sh <스크립트파일>
실행 방법 2. 실행 가능 속성 부여 chmod +x <스크립트파일>
후 ./<스크립트파일>
로 실행
스크립트 파일의 속성을 755
로 변경해주면 모든 사용자가 스크립트를 사용할 권한이 생김
스크립트 파일을 /user/local/bin 디렉토리에 복사해두면 모든 사용자가 접근할 수 있음
보안상 root 권한으로 수행
변수의 기본
-
사용 전 미리 선언하지 않음. 처음 값이 할당되면서 자동으로 변수가 생성
-
모든 변수는 문자열(String)로 취급
-
대소문자를 구분
-
변수 대입시 =
좌우에 공백이 없어야 함
-
값에 띄어쓰기(공란)가 있다면, "
/ '
등으로 묶어줘야 함
-
$
문자가 들어간 글자를 사용하려면 ' '
로 묶어주거나 앞에 \
를 붙이면 됨
숫자 계산
-
변수에 대입된 값은 모두 문자열로 취급
-
변수에 들어있는 값을 숫자로 해서 +
, -
, *
, /
등의 연산을 하려면 `expr (연산식)`
을 사용
-
수식에 괄호()
나 곱하기*
의 경우 그 앞에 꼭 역슬래쉬\
를 붙임
파라미터(Parameter) 변수
-
파라미터 변수는 $0, $1, $2…의 형태
-
전체 파라미터는 $*
파라미터변수 |
$0 |
$1 |
$2 |
$3 |
명령어1 |
yum |
-y |
install |
gftp |
명령어2 |
para1.sh |
값1 |
값2 |
값3 |
조건문 - 기본 if문
형식
” 조건 “의 사이의 각 단어에는 모두 공백이 있어야 함
조건문 - if~else문
형식
중복 if문을 위해서 else if가 합쳐진 elif문도 사용할 수 있음
조건문에 들어가는 비교 연산자
문자열 비교
문자열 비교 |
결과 |
“문자열1” = “문자열2” |
두 문자열이 같으면 참 |
“문자열1” != “문자열2” |
두 문자열이 같지 않으면 참 |
-n “문자열” |
문자열이 NULL(빈 문자열)이 아니면 참 |
-z “문자열” |
문자열이 NULL(빈 문자열)이면 참 |
산술 비교
산술 비교 |
결과 |
수식1 -eq 수식2 |
두 수식(또는 변수)이 같으면 참 |
수식1 -ne 수식2 |
두 수식(또는 변수)이 같지 않으면 참 |
수식1 -gt 수식2 |
수식 1이 크면 참 |
수식1 -ge 수식2 |
수식 1이 크거나 같으면 참 |
수식1 -lt 수식2 |
수식 1이 작으면 참 |
수식1 -le 수식2 |
수식 1이 작거나 같으면 참 |
!수식 |
수식이 거짓이라면 참 |
파일과 관련된 조건
파일 조건
파일 조건 |
결과 |
-d 파일명 |
디렉터리면 참 |
-e 파일명 |
존재하면 참 |
-f 파일명 |
일반파일이면 참 |
-g 파일명 |
set-group-id가 설정되어있으면 참 |
-r 파일명 |
읽기 가능이면 참 |
-s 파일명 |
크기가 0이 아니면 참 |
-u 파일명 |
set-user-id가 설정되어있으면 참 |
-w 파일명 |
쓰기 가능이면 참 |
-x 파일명 |
실행 가능이면 참 |
조건문 - case~esac문(1)
- if문은 참 또는 거짓일 경우에만 사용 가능(이중분기)
- case문은 여러가지 경우의 수가 있다면 사용하면 좋음(다중분기)
조건문 - case~esac문(2)
AND / OR 관계 연산자
반복문 - for문(1)
형식
for i in 1 2 3 4 5 6 7 8 9 10
= for((i=1;i<=10;i++))
= for i in `seq 1 10`
반복문 - for문(2)
- 현재 디렉터리에 있는 쉘 스크립트 파일(*.sh)의 파일명과 앞 3줄씩을 출력하는 프로그램
반복문 - while문(1)
while은 조건에 [ 1 ] 또는 [ : ]가 오면 항상 참
반복문 - while문(2)
- 1 ~ 10까지의 합계 출력(for1.sh와 동일한 결과)
until문은 조건식이 참일때까지(거짓인 동안) 계속 반복
while [ $i -le 10 ] = until [ $i -gt 10 ]
반복문 - while문(3)
- 비밀번호를 입력받고, 비밀번호가 맞을 때까지 계속 입력받는 스크립트
반복문 - until문
break, continue, exit, return 문
사용자 정의 함수
형식
함수의 파라미터 사용
형식
eval
export
printf
- C언어의 printf() 함수와 비슷하게 형식을 지정하여 출력
set과 $(명령어)
shift
끝
매번 쉘 스크립트를 처음부터 만드는게 아니라, 기존에 사용했던 부분을 재활용해서 만들다보니
기초 문법을 점점 잊어갔었는데.. 되새김질 겸 정리