728x90

이성미 강사님의 '따라하면서 배우는 배시 쉘 프로그래밍' 시리즈를 수강하며 공부한 내용을 정리했습니다.

https://youtu.be/38wy3gsiR6Q

 

[따배셸] 0. 따라하면서 배우는 Shell Programming 소개 영상!

[공지] 안녕하세요, 편집자 밍밍&차차입니다! 여러분의 성원에 힘입어 쉘 프로그래밍과 더불어 새로운 콘텐츠를 기획 중에 있습니다~ 원하시는 콘텐츠를 따배런 커뮤니티탭 첫 게시글에 남겨주

youtu.be

 

학습 환경: 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('')
      '' 내의 모든 문자의 의미 제거
[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