본문 바로가기

전공 과목 시험정리/서버구축실무

ShellScript

1. 쉘 (Shell)

가. 쉘의 개념

- 리눅스에서 대화형 사용자 인터페이스를 부르는 용어이며 쉽게 명령어 해석기라고 함.

- 사용자의 명령어를 해석하여 그 결과를 커널에 전달하고 원하는 일들을 수행하게 해주는 역할

- 명령어를 실행시키는 명령어 해석기 이면서도 프로그래밍 언어로서의 특성을 가짐

- 별도의 프로그램을 사용하지 않고도 시스템을 보다 효율적으로 운영할 수 있는 내부 루틴을 작성할 수 있음

- 사용자가 로그인 하면 자동으로 쉘 프로그램을 실행하게 되고 만일 /etc/passwd 파일에 특정 쉘이 지정되어 있지 않으면, 사용자는 기본 쉘인 Bash Shell을 이용하여 로그인

- 쉘들은 /etc/shells 파일에 경로가 설정되어 있으며, 사용자가 원한다면 사용하고자 하는 쉘을 변경 가능


나. Bourne Shell (sh)

- Unix 시스템의 표준 구성 요소로서 가장 오래되고 강력한 명령 프로그래밍 언어 기능을 가짐

- 모든 리눅스 시스템에서 사용할 수 있으며, Bourne Shell 프로그램의 실행 명령어는 'sh'

- 가장 큰 단점은 상호 대화식 방식을 취하고 있지 않음

- .profile 파일로 환경을 초기화 할 수 있음


다 . C Shell (csh)

- 프로그램 명은 'csh' 로서 버클리 버전 UNIX의 쉘로 개발된 것으로 Bourne Shell 과 매우 유사

- 커맨드 구조에서 C언어와 유사하고, 몇 가지 프로그램 개발에 편리한 기능도 내장하고 있어 많이 보금

- 상호 대화식 방식으로 구성되어 있으며 .cshrc 파일로 환경을 초기화할 수 있음


라. Bash Shell (Bash)

- FSF (Free Software Foundation) 에서 개발한 무료 공개용 쉘

- 최종 목적은 IEEE POSIX Shell 과 도구 명세 (IEEE Working Group 1003.2) 에 호환

- Korn Shell 과 C Shell 의 유용한 특징들을 통합하고 있으며, 쉘 프로그래밍 언어에 있어서는 Bourne Shell 과 호환

- 대부분의 리눅스 기계에서의 표준적인 명령어 라인 인터페이스, 명령어 라인 편집, 완료, 재실행 지원

- 리눅스에서 처음 로그인을 하였을 때 기본으로 주어지는 쉘


[SHELL의 종류]


 Bourne Shell 계열

 명칭

실행파일 

비고 

 Bourne Shell

/bin/sh 

 

Korn Shell 

/bin/ksh 

Bourne Shell 과 C Shell을 접목 

Bash 

/bin/bash 

 

Z Shell 

/bin/Zsh 

Bourne Shell에 다양한 기능 추가 

 C Shell 계열

C Shell 

/bin/csh 

 

TC Shell 

/bin/tcsh 

C Shell의 결함을 고치고 새로운 기능 추가 



2. 쉘의 활용과 환경설정

가. 사용자 쉘 확인 및 변경

- /etc/shells 파일에서 경로 설정 확인

cat /etc/shells

/bin/sh

/bin/bash

/bin/csh


- /etc/passwd 파일에서 사용자가 사용하는 쉘 확인

user01:x:500:500::/home/user01:/bin/bash

--> 사용하는 쉘을 변경하려면 /etc/passwd 파일 수정

--> 해당 사용자의 로그인을 막으려면 마지막 필드를 '/bin/false' 로 수정


- 사용하는 쉘 확인

echo $SHELL


나. bash

- Bash Shell 버전 알아보기

bash --version


1) 환경 설정 파일

- 리눅스에서 쉘 환경 설정 파일은 기본적으로 사용자의 홈 디렉토리 안에 있으며, '.' 으로 시작하는 파일들이 해당

- 파일이름은 'Resource Configuration' 라는 의미의 'rc' 로 끝나는 경우가 대부분

- 쉘 환경 설정 파일의 종류 (/etc/skel)


 파일

설명 

.bashrc 

alias 설정과 /etc/bashrc 파일 실행하도록 구성 

.bash_profile 

로그인할 때 실행하는 설정파일로 로그인 시점에서 실행시키고 싶은 명령, 시스템에 대한 정보를 보여주는 명령 등을 실행 

.bash_logout 

로그인 쉘이 종료 되면서 실행 

/etc/profile 

유저가 로그인할 때 가장 먼저 읽어들이는 시스템 초기화 파일 

/etc/bashrc 

 시스템 전역 함수와 alias 설정




2) 환경 변수

- 사용자가 사용하고자 하는 쉘의 환경을 작업 환경에 맞도록 설정하는데 사용되는 값.

- 사용자마다 이 변수 값을 변경해 줌으로써 각기 원하는 환경을 설정할 수 있으며, 쉘 프로그래밍을 할 경우에도 유용하게 사용



환경변수 

설명 

환경변수 

설명 

HOME 

현재 사용자의 홈 디렉토리 

PATH 

실행 파일을 찾는 디렉토리 경로 

LANG 

기본 지원되는 언어 

PWD 

사용자의 현재 작업하는 디렉토리 

USER 

현재 사용자의 이름 

SHELL 

로그인 해서 사용하는 쉘 

BASH 

bash 쉘의 경로 

MAIL

메일을 보관하는 경로 

HISTFILE 

히스토리 파일 경로 

HISTSIZE 

히스토리 파일에 저장되는 개수 

HOSTNAME 

호스트의 이름 

USERNAME 

현재 사용자 이름 


- 환경 변수값 확인

- 하나씩 확인

# echo $변수명 or printenv 변수명


- 현재 설정된 변수 값을 모두 확인

# printenv


- 환경 변수 값 설정 및 변경

# export [환경변수명]=[변수값]


ex) export HISTSIZE=500 (띄어쓰기 없이)


3. Shell Script

가. 기본

1) 작성

- 파일의 확장자는 '*.sh' 사용을 권장

- 작성 예

#!/bin/bash            --> 특별한 형태의 주석. 해당 스크립트를 실행하기 위한 프로그램을 커널에게 알림

echo $USERNAME    --> echo 로 환경변수 USERNAME 출력

echo $HOSTNAME    --> echo 로 환경변수 HOSTNAME 출력

exit 0                --> 종료 0은 종료 코드를 의미


2) 실행

- sh 명령으로 실행

sh [Script Name]


- 실행 권한을 부여하고 실행

chmod +x [Script Name]

./[Script Name]


[+] 쉘 스크립트에서 환경변수를 사용할 경우,

환경변수는 $[변수명] 으로 사용하거나 ` (역따옴표) 로 묶어준다..

$PWD == `PWD`


나. 변수

1) 변수의 기본

- 쉘에서는 변수를 사용하기 전에 미리 선언하지 않음. 변수에 값이 할당되면 자동으로 변수 생성

- 모든 문자열은 `string(문자열)` 취급. (숫자를 넣어도 마찬가지)

- 변수명은 대소문자를 구분. ($aa =/= $AA)

- 변수를 대입할 때 = 의 좌우에는 공백이 없어야 함.

- 값의 공백은 " " 로 묶어야 함.

Ex) testval="asdf asdf"


2) read

- read 명령은 newline (엔터로 구분) 을 발견할 때까지 한 라인을 가져와서 읽는다.


 read a

읽은 내용을 a 변수의 값으로 할당

read first second 

공백이나 newline 을 기준으로 나눠 할당 

 read

REPLY 빌트인 변수에 할당 



3) 변수의 입력과 출력

- $문자를 변수로 인식하지 않고 문자 자체로 출력하려면 '' 로 묶어주거나 앞에 '\' 를 붙인다.


4) 산술 연산

- 정수형 변수 선언

declare -i [변수이름]

(정수형으로 선언하면 float 형 자료는 못넣음)


- let 명령

빌트인 명령으로 declare 로 선언하지 않았을 경우에 정수형 산술 연산을 수행할 수 있다.

# help let : 사용되는 연산자 목록

let 명령은 (( )) 로도 사용할 수 있다.


++ bash 는 정수형 연산만 지원하므로, 실수형 연산은 bc, awk 와 같은 다른 유틸리티를 사용해야 한다.


5) 파라미터 

- 파라미터 변수는 $0, $1, $2 의 형태를 가진다.

ex) yum install -y samba 의 경우

$0 = yum

$1 = install

$2 = -y

$3 = samba


다. 조건문

1) 종료상태

- bash 는 표현식의 결과가 true 인지 false 인지에 따라 명령이 성공인지 실패인지 테스트 한다.

- 종료 상태가 0이면 성공(true)이고, 0 이외의 수이면 실패 (false) 이다.

- 이전 명령의 성공/실패 를 확인하려면 ? 변수의 값을 출력한다.

ex) echo $?


2) test 명령 연산자

- test 명령은 [ ] 으로 대체할 수 있다.

- [ ] 앞뒤에 빈칸이 있어야 한다.


문자열

[ string ] : NULL 여부

[ -z string ] : 문자열 길이가 0인지

[ -n string ] : 문자열 길이가 0이 아닌지


정수형

[ int1 -eq int2 ] : 둘이 같은지

[ int1 -ne int2 ] : 둘이 다른지

int1 -gt int2 ] : 1이 2보다 큰지

int1 -ge int2 ] : 1이 2보다 크거나 같은지

int1 -lt int2 ] : 1이 2보다 작은지

int1 -le int2 ] : 1이 2보다 작거나 같은지


논리적

[ string1 -a string2 ] : 둘다 true 인지

[ string1 -o string2 ] : 둘 중 하나가 true 인지

[ !string1 ] : not


논리적 복합

[[ string1 && string2 ]] : 둘다 true

[[ string1 || string2 ]] : 둘 중 하나가 true 인지

[[ !string1 ]] : not


3) if 문

if [ 1 -eq 2 ]

then

참이면 실행

fi


if -> 만약

elif -> 아니면 만약

else -> 아니면


4) 파일 관련 조건


 파일 연산자

결과 

파일 연산자 

결과 

 -d filename

파일이 디렉토리면 참 

-s filename 

파일크기가 0이 아니면 참 

-e filename 

파일이 존재하면 참 

-w filename 

파일이 쓰기가능이면 참 

-f filename 

파일이 일반 파일이면 참 

-x filename 

파일이 실행가능이면 참 

-r filename 

 파일이 읽기가능이면 참 

 

 



5) for 문

for 변수 in 목록

do

명령

done








'전공 과목 시험정리 > 서버구축실무' 카테고리의 다른 글

Samba  (0) 2015.10.06
NFS  (0) 2015.10.06
라우터 명령어  (0) 2015.10.06
Ubuntu 14.10 Server 에 Pydio 설치  (0) 2015.07.24
메일 서버  (0) 2015.07.02