본문 바로가기
리눅스/Part3. Ch08. 스크립트 및 쉘프로그래밍

02. 기본 쉘 명령어

by Engineer-Lee 2022. 12. 17.
반응형

- Bash Shell

. 대화형 사용성.
. 당시 사용되던 유용한 기능들 대부분 흡수 (예, 자동완성)

 

- Z Shell

   - Korn Shell(ksh), ksh의 고성능 버전 Z Shell(zsh)
   - 고유의 기능(예, 오타 교정, 색상 지정 등) + sh, ksh, bash와 두루 호환
   - Oy My ZSH로 셸에 다양한 기능 추가
-> 셸 스크립트 실행 (/bin/sh), 로그인 셸 (/bin/bash, /bin/zsh)

 

 

많이 사용되는 쉘 명령어

• 파이프와 리다이렉션
• 변수와 인용
• 환경변수
• 필터 설정
• 쉘 스크립트

 

 

 

 

파이프와 리다이렉션

- 모든 프로세스는 3개의 기본 파일 디스크립터를 가지고 있음
. 표준 입력(STDIN) : 0, 표준 출력(STDOUT) : 1, 표준 오류(STDERR) : 2

 

- <, >, >> 기호는 한 명령의 입력이나 출력을 파일로 전환하라는 지시어
  < : 해당 명령의 표준 입력을 기존 파일의 내용물에 연결
  >, >> : STDOUT을 파일로 리다이렉트. > 는 파일의 내용을 대체,
  >> 는 기존 파일의 내용에 추가

 

- 한 명령의 STDOUT을 다른 명령의 STDIN에 연결하려면 파이프(|)를 사용

 

- 앞 명령이 성공했을 경우에만 두번째 명령 실행

 

- 앞 명령이 실패했을 경우에만 두번째 명령 실행

 

- 한 명령을 여러 줄에 걸쳐 쓰려면 \ 기호를 사용

 

- 여러 명령을 결합해서 한 줄로 만드는 경우, 명령문들을 서로 구분하기 위해 ; 기호 사용

 

변수와 인용

- 변수명에 값을 지정할 때는 이름만 사용, 값을 참조할 때는 변수명 앞에 $ 기호를 사용


- 변수를 참조할 때는 변수명 주변을 중괄호({})로 묶어서 어디 까지가 변수이고 텍스트인지를 구분


- 변수 네이밍에는 표준 관례가 있지는 않지만,


   . 환경변수, 글로벌 환경설정에서 읽은 변수: 모든 글자가 대문자
   . 로컬 변수: 소문자로 표시. _ 부호로 구성요소들을 구분
   * 대/소문자 구분함


- 작은 따옴표, 큰 따옴표, 역 따옴표

 

 

환경변수

- 실행 프로그램들은 환경변수를 참조해 구동 조건을 변화


- 환경 변수 조회

- 로그인 시 설정하는 환경 변수는 ~/.profile이나 ~/.bash_profile에 포함


- PWD, HOME과 같은 환경변수들은 셸에 의해 자동으로 관리

 


필터 명령 

- wc : 줄, 단어, 문자의 수를 셈


- head와 tail : 파일의 시작이나 끝을 읽어냄

- grep : 입력 텍스트를 검색해서 주어진 패턴과 일치하는 줄들을 출력

 

 

셸 스크립트

- 셸이나 명령 줄 인터프리터에서 돌아가도록 작성된 스크립트
예) 커맨드 라인에서 타이핑 하는 것들을 자동화

 

- 단, 50줄이 넘어가거나 셸에 없는 기능이 필요 -> 파이썬, 루비

 

- .sh라는 파일 확장자를 사용하기도 하지만, 대부분 셸 스크립트는 파일 확장자를 사용하지 않음

 

- 오리지널 Borne Shell의 문법으로 제한하는 것을 권장
   -> 스크립트가 다른 시스템에서 동작하지 않는 경우를 방지

 

- 작성
  . 첫 줄은 shebang
   -> 현재 파일의 실행 방법을 커널에 안내 (호출된 셸 입장에서는 주석)
   -> 셸의 경우, 대부분 /bin/sh (링크 형태)
  . 주석은 #
  . 하나의 논리적인 줄을 여러 줄로 분리할 때는 끝에 \ 사용
  . 여러 실행문을 하나의 줄에서 실행할 때는 ; 으로 구분

 

- 실행
  -> $ chmod +x myscript         $ ./myscript
  -> $ sh myscript                                                   # 새로운 셸에서 명령 실행
  -> $ source myscript 또는     $ . myscript            # 현재 셸에서 명령 실행
  . 각 명령을 실행하기 전에 명령 내용을 출력
  -> $ sh -x myscript

반응형