Index
- Shell이란?
- Shell 종류
- Shell 설정
- Shell 프롬프트
- Shell 사용 문법
Shell 이란 ?
1. 쉘(Shell) 은 커널과 사용자 사이를 이어주는 역할을 해준다.
2. 쉘(Shell) 은 하나의 명령어 처리기(Command Processor)이다.
3. 그래서 사용자로부터 명령어를 입력 받아서 해당 명령어를 처리해준다.
우리가 흔히 사용하는 윈도우의 명령 프롬프트(CMD) 도 쉘이다.
Shell 종류
1. Bourne Shell (sh)
Bourne Shell 은 1974년 'Stephen Bourne' (스티브 본) 이 개발하였고, 최초의 쉘(Shell) 이다. 대부분의 리눅스에 기본적으로 설치가 되어있다. 설치 위치는 '/bin/sh' 이다.
2. C Shell (csh)
C Shell 은 1978년 'Bill Joy' (빌 조이) 가 개발한 쉘(Shell) 이다. C Shell 은 Bourne Shell 의 사용성을 높이고, 더욱 한 층 강력하게 만들어졌다. C Shell 은 이름에서 보이다시피 C 언어를 기반으로 만든 Shell 이다. 때문에 강력한 프 로그램 작성 기능을 지니었다. 설치 위치는 '/bin/csh' 이다.
3. tee-see-Shell (tcsh)
tee-see-Shell 은 'Carnegie Mellon University' (카네기 멜런 대학교) 의 학생들이 개발하여 1983년. 소스코드를 게시하였다. 간단하게 설명하면 C Shell 에서 명령 행 완성과 명령 행 편집 기능을 추가한 것이다. 초기 맥 OS X 는 tcsh를 기본 셸로 포함하고 있었다. (하지만 배시 쉘에 밀려버렸다.) 설치 위치는 '/bin/tcsh' 이다.
4. Z Shell (zsh)
Z Shell 은 'Paul Falstad' (폴 폴스타드) 가 1990년 대학교에 재학 중 일 때 첫 버전을 작성하였다. Z Shell 은 지금까지의 수 많은 쉘(Shell) 들의 기능을 머금고 있다. 그렇기 때문에 많은 개선 사항들이 갖추어진 확장형 Bourne Shell 이다. 설치 위치는 '/bin/zsh' 이다.
5. Bourne-again shell (bash)
Bourne-again shell 은 지금 현 시대에 가장 많이 쓰이는 Shell 이라고 생각한다. 줄여서 Bash Shell 은 GNU 프로젝트를 위해 'Brian Fox' (브라이언 폭스) 가 작성한 쉘(Shell) 이다. GNU 운영체제와 리눅스, 맥 OS 등 기본 쉘로 채택 되어있다. (사실상 모든 리눅스가 기본으로 Bash Sehll 만을 사용한다...) C Shell 과 Bourne Shell 의 기능들이 많이 포함 되어 있다. 대부분 Shell Script 라고 검색을 하면 기준이 십중팔구는 Bash Shell 로 작성 되어 있다. 그만큼 자료가 방대면서 배우기 쉽고, 강력하다는 증거이다. 설치 위치는 '/bin/bash' 이다.
이 외에도 많은 쉘이 존재한다.
Shell 설정
이제부터는 리눅스 (bash)shell 을 다뤄보자
현재 설치된 Shell 확인
cat /etc/shells
# 또는
chsh -l
현재 지정된 Shell 확인
echo $SHELL
# 또는
grep 사용자ID /etc/passwd
설정 Shell 종류 변경 (ksh로 변경)
usermod -s /bin/ksh
# 또는
chsh -s /bin/ksh
필요한 Shell이 설치되어있지 않다면, 해당 리눅스 계열에 맞는 명령어로 yum, rpm 등으로 설치하여 사용하자.
+ P. S - 로그인시, 파일 읽는 순서
추가로 사용자가 계정으로 로그인 함과 동시에 읽어드리는 쉘 설정 파일들이 존재한다. (profile, bash 등..)
해당 파일들을 읽어 드리는 순서는 아래와 같다
- /etc/profile
로그인 과정에서 제일 먼저 실행되는 환경 파일
root로 로그인 하는 경우 일반사용자들과는 달리 PATH 변수에 관리 명령이나 도구가 설치되어 있는 /sbin, /usr/sbin, /usr/local/sbin 경로가 설정 - /etc/profile.d/*.sh
- ~/.bash_profile
- ~/.bashrc
- /etc/bashrc
Shell 프롬프트 설정
프롬프트는 커멘드상에서 입력줄에 표시되는 기본정보 부분을 가리킨다.
설정은 사용자별로 ~./bashrc에서 $PS1 , $PS2() 변수에 지정하여 사용하는것이 일반적이다.
모든계정에 대한 설정은 /etc/bashrc 또는 /etc/profile.d/prompt.sh 파일을 수정하여 설정한다.
프롬프트에 사용하는 옵션은 아래와 같다.
프롬프트 옵션
\t | 24시간의 단위로 현재시각을 HH:MM:SS 로 표시 |
\T | 12시간의 단위로 현재시각을 HH:MM:SS 로 표시 |
\@ | 12시간의 단위로 현재시각을 오전/오후 로 표시 |
\d | 현재 날짜를 나타냄. 요일, 월, 일 형식으로 |
\s | 현재 사용중인 쉘의 이름을 나타냄 (C쉘이면 /bin/csh, bash쉘이면 /bin/bash) |
\w | 현재 디렉토리의 전체 절대경로를 모두 표시함 |
\W | 현재 디렉토리의 전체 절대경로명 중 마지막 디렉토리명만을 표시함. 즉 현재디렉토리만 표시함 |
\u | 사용자명을 표시함 |
\h | 서버의 호스트명을 표시함 (www.uzuro.com에서 www 부분) |
\H | 서버의 도메인명을 표시함 (www.uzuro.com에서 uzuro.com 부분) |
\# | 접속한 순간부터 사용한 명령어의 번호를 1번부터 차례대로 표시함 |
\! | 사용한 명령어의 history 번호를 표시함 |
\\$ | 현재 사용자가 root(uid 가 0 )이면 # 을 표시하고 아니면 $ 를 표시함 |
\\ | '\' 문자 자체를 표시함 |
\a | ASCII 종소리 문자 (07) |
\e | ASCII 의 escape 문자 (033) |
\n | 개행문자 (줄바꿈) |
\v | 사용중인 bash 의 버전 |
\V | 사용중인 bash 의 배포, 버전+패치수준으로 버전을 상세히 표시함 |
\r | Carrage retrun |
\nnn | 8진수 nnn 에 해당하는 문자 |
필자는 사용자이름(\u), @ 현재 디렉토리(\W) 만 보여주고 싶어 설정 해 보았다.
export PS1="\u@\h@\W > "
무미 건조해서 설정값에 컬러를 넣어주었다.
프롬프트 색상코드
나는 Cyan, Green, Yellow 그리고 그냥 화면에서는 흰색을 위해 0으로 설정해주었다.
프롬프트 변수 설정 예시
export PS1="\[\e[36;1m\]\u@\[\e[32;1m\]\h@\[\e[33;1m\]\W >\[\e[0m\]"
색설정에 대한 옵션을 외울 필요는 없다.
프롬프트 설정은 이 정도로 마무리하고,
이제 그만 기본 문법을 살펴보자.
Shell 기본 문법
Shell은 인터렉티브하게 대화식으로 CMD에서 명령어를 입력하여 사용하기도 하지만,
프로그래밍하여 .sh 실행파일을 생성하여 논 인터렉티브하게 사용하기도 한다.
작성 기본 상식
1. 최상단에 #!/bin/bash 추가
- sh파일을 작성할때는 반드시 최상단에 #!/bin/bash 기록해줘야 해당 Shell을 통해 실행한다.
2. Shell 파일 실행 방법 ( ./ )
- sh / source / . 등을 이용해서 실행하면 권한이 없어도 수행이 가능하지만, ./ 로는 권한없이 수행이 불가하다
sh 파일명.sh
. 파일명.sh
source 파일명.sh
./파일명.sh # 기본적으로 권한이 없는 파일은 수행시킬수 없다.
3. 주석은 #을 이용한다.
4. 출력은 echo, printf, read(C에서 Scanf와 같음, 입력을 기다림) 등을 이용한다
#!/bin/bash
a=10
echo "hi echo 자동개행이되는구나$a"
printf "hi printf 개행을 해줘야하는구나 %d\n" $a
5. if 블록은 fi로 끝난다.
#!/bin/bash
num=7
if (( ${num} == 7 )); then
echo "equal!"
else
echo "non equal"
fi
비교 연산자 | 의미 |
-eq | 같음 |
-ne | 같지 않음 |
-gt | 더 큼 |
-ge | 크거나 같음 |
-lt | 더 작음 |
-le | 더 작거나 같음 |
-z | 문자열이 null인가? |
-n | 문자열이 null이 아님 |
-a | 논리 and |
-o | 논리 or |
6. for문은 do 반복수행문, done으로 끝난다
arr=("a" "b" "c" "ddd") # 배열변수 선언 , 띄어쓰기 주의
for x in ${arr[@]}; do # arr에 @는 모든 원소를 의미, i로 받아옴
echo $x
done
7. 변수에 타입은 없으며, 선언을 제외하고 사용시 $를 붙인다.
8. 기본변수로 $0은 실행 파일명을 가지며, $# 파라미터 갯수를 가지며, $$ 프로세스ID를 나타낸다.
#!/bin/bash
echo "기본변수 "
echo "\$$ : " $$
echo "\$0 : " $0
echo "\$# : " $#
9. 실행시 매개변수는 들어온 순서대로 $1 ~ $999 까지 사용가능하며, $* , $@을 통해 한번에 받을수 있다.
10. 산술연사는 `를 감싸 expr로 표현한다.
#!/bin/bash
a=$1
b=$2
c=$3
echo $1
echo b + c = `expr $b + $c` # `이거로 감싸줘야 연산이 됨
echo "\$@ :"$@
echo "\$* :"$*
실행시 매개변수 3개이상 주어야 함 a,b,c에서 받음
이상 Shell 의 기본문법에 대해서 정리해보았습니다.
좀더 추가적이고 상세한 문법은 아래 블로그를 참조해주세요.
'Work > Server' 카테고리의 다른 글
[리눅스 마스터] 공부 자료 정리 (0) | 2021.08.23 |
---|---|
프록시 서버 구축 (2) | 2021.04.22 |
[Ansible] 오라클 설치, LAMP 스텍 구성 (0) | 2021.04.06 |
[Linux Master] 리눅스 마스터 공부법, 기출문제, 요약집 (9) | 2021.03.16 |
[Linux] ulimit 설정 (Max user process, open files) (0) | 2021.03.16 |