728x90
이성미 강사님의 '따라하면서 배우는 배시 쉘 프로그래밍' 시리즈를 수강하며 공부한 내용을 정리했습니다.
학습 환경: CentOS 8, root 권한
Bash shell의 기능
1. Quoting Rule
- Metacharacters
- Shell에서 특별히 의미를 정해 놓은 문자들
- \ ? () $ ... * % {} [] 등
-
특수 문자 정의 ~ 홈 디렉토리 . 현재 디렉토리 .. 상위 디렉토리 # 주석 $ 쉘 변수 & 백그라운드(Background 작업) * 문자열 와일드 카드(Wildcard) - 임의의 문자열 ? 한 문자 와일드 카드 - 하나 문자 대체 [] 문자의 범위 지정 - file[ANT] fileA, fileN, fileT 검색, file[A-C] fileA, fileB, fileC 검색 {} 문자열 집합 - touch file{1..3} file1, file2, file3 생성 ; 쉘 명령 분리자 (하나의 라인에서 여러 명령을 수행할 수 있도록 커맨드 분리) | 파이프 < 입력 재지정 > 출력 재지정 >> 출력 재지정 (이어서 쓰기) && 이전 명령이 정상 종료되었을 때(0 반환) 다음 명령 실행 || 이전 명령이 비정상 종료되었을 때(1 반환) 다음 명령 실행
- Quoting Rule: 메타 문자의 의미를 제거하고 단순 문자로 변경
- Backslash(\)
\ 바로 뒤의 메타 문자의 의미 제거 - Double Quotes("")
"" 내의 모든 문자의 의미 제거, 단 $, `, \은 제외 - Single Quotes('')
'' 내의 모든 문자의 의미 제거
- Backslash(\)
[root@localhost ~]# echo 'Today is date'
Today is date
[root@localhost ~]# echo 'Today is `date +%Y-%m-%d`'
Today is `date +%Y-%m-%d`
[root@localhost ~]# echo "Today is `date +%Y-%m-%d`"
Today is 2021-09-07
2. Nesting commands
Command 치환: 명령어의 실행 결과를 치환하여 명령 실행
Nesting Commands - $(명령어)로 사용 가능
$(command)
`command`
echo "Today is $(date)"
echo "Today is `date`"
[root@localhost ~]# date
Tue Sep 7 21:45:25 EDT 2021
[root@localhost ~]# echo 'Today is date'
Today is date
[root@localhost ~]# echo "Today is $(date)"
Today is Tue Sep 7 21:46:14 EDT 2021
[root@localhost ~]# echo "Today is `date`"
Today is Tue Sep 7 21:47:05 EDT 2021
[root@localhost ~]# touch report-$(date +%Y%m%d)_v1
[root@localhost ~]# touch report-`date +%Y%m%d`_v1
[root@localhost ~]# ls
report-20210907_v1
3. Alias
alias - Shell의 명령에 새로운 이름을 부여 (커맨드의 단축어)
alias 관리 명령
- alias 등록: alias name='command'
- alias 확인: alias or alias name
- alias 삭제: unalias name
[root@localhost ~]# alias c=clear
[root@localhost ~]# alias c
alias c='clear'
4. Prompt
PS1 변수를 이용해 shell의 기본 프롬프트 모양을 설정
Bash shell에서만 Prompt 모양에 적용 가능한 특수 문자 존재
특수문자 | 의미 |
\h | 호스트 이름 |
\u | 사용자 이름 |
\w | 작업 디렉토리 (절대 경로) |
\W | 작업 디렉토리 (상대 경로) |
\d | 오늘 날짜 |
\t | 현재 시간 |
\$ | $ 또는 # 프롬프트 모양 |
[root@localhost nfs]# whoami
root
[root@localhost nfs]# pwd
/tmp/nfs
[root@localhost nfs]# echo $PS1
[\u@\h \W]\$
[호스트 이름@사용자 이름 상대 경로] 프롬프트
[root@localhost nfs]# PS1='test@\u \w|\$'
test@root /tmp/nfs|#
alias와 PS1은 현재 로그인된 세션에서만 적용된다. 로그아웃 후에도 적용하려면 아래 경로 파일에서 수정 필요하다.
[root@localhost ~]# ls -a
. anaconda-ks.cfg .bash_logout .bashrc .cshrc .tcshrc
.. .bash_history .bash_profile .config .ssh .viminfo
[root@localhost ~]# vi .vashrc
5. Redirection
파일에 대해 입출력 방향을 전환시켜 줌
Communication Channels
STDIN: 표준 입력 / 입력을 통해 프로그램에게 전달 (Standard input) - 사용하는 디바이스: 포트
STDOUT: 표준 출력 / 프로그램 처리 결과 출력 (Standard output) - 사용하는 디바이스: 터미널
STDERR: 표준 에러 / 프로그램 처리 중 에러 출력 (Standard error) - 사용하는 디바이스: 터미널
Communication channels |
Redirection characters |
의미 | |
STDIN | 0< | 0<< | 입력을 키보드가 아닌 파일을 통해 받음 |
STDOUT | 1> | 1>> | 표준 출력을 터미널이 아닌 파일로 출력 |
STDERR | 2> | 2>> | 표준 에러 출력을 터미널이 아닌 파일로 출력 |
[root@localhost ~]# date > test
[root@localhost ~]# cat test
Thu Sep 16 02:51:24 EDT 2021
[root@localhost ~]# date >> test
[root@localhost ~]# cat test
Thu Sep 16 02:51:24 EDT 2021
Thu Sep 16 02:51:38 EDT 2021
[root@localhost ~]# ls a.txt 2> error.txt
[root@localhost ~]# cat error.txt
ls: cannot access 'a.txt': No such file or directory
[root@localhost ~]# ls test test10
ls: cannot access 'test10': No such file or directory
test
[root@localhost ~]# ls test test10 2>> error.txt
test
[root@localhost ~]# cat error.txt
ls: cannot access 'a.txt': No such file or directory
ls: cannot access 'test10': No such file or directory
0< 1>에서 0과 1은 생략 가능함
STDIN의 경우 여러 유저에게 동일한 내용을 발송해야 할 때, 파일로 만들어 두고 입력 가능
6. Pipeline
명령의 실행 결과를 다음 명령의 입력으로 전달
리눅스의 명령어를 조합하여 사용
command1 | command 2 | command 3
[root@localhost ~]# ls -al | wc -l
14
// 현재 디렉토리에 파일이 몇 개 있는가 | 해당 커맨드 줄 수
728x90
'OS > Linux' 카테고리의 다른 글
Linux BASH Shell (1) Shell과 변수 (2) | 2021.09.07 |
---|---|
[Linux] (1) | 2021.05.13 |
[Linux] /etc/fstab (2) | 2021.02.05 |