쉘스크립트

장준영·2024년 9월 1일

개요

회사에서 사용하는 쉘스크립트 공부를 위해 따배쿠 및 기타 자료를 참고하여 학습을 하였다.

Linux shell이란?

shell이란?

  • 사용자 명령어 해석기
  • 사용자가 프롬프트에 입력한 명령을 해석해서 운영체제에게 전달

-> 즉 리눅스 커널에서 해석기라고 보면 된다.

shell의 종류

Boarne shell(sh) : AT&T 벨연구소의 스티븐 본이 개발한 original shell

C Shell(csh, tcsh) : Bill Joy가 C언어의 기수을 넣어서 만든 shell
C언어의 문법을 적용
History, aliases, job control, vi command editing and completion 기능을 포함함

Korn shell(ksh) : David Korn이 AT&T에서 기존 bourne shell 에 C shell의 기능을 포함시켜 생성

Bourne-again shell(bash) : GNU Project로 만들어졌고, csh, ksh이 가진 기능을 포함하면서 bourne shell과 호한성을 많이 높여 shell로 리눅스, MAC oS의 기본 shell이고 윈도우에서도 사용가능(wsl2)

echo $SHELL

을 통해 기본 쉘 확인가능하다.

기본 쉘 확인

  • 사용가능한 shell리스트 확인하기
$cat /etc/shells
  • 현재 작업 shell 확인
$echo $SHELL
  • 로그인 Shell변경
$cat /etc/passwd
$chsh

예를 들어 ubuntu가 사용자라면 sudo chsh ubuntu -> /bin/bash -> /bin/sh 로 변경가능

Bash shell 과 변수

shell의 변수란?

  • 데이터를 넣는 그릇

  • 선언할 필요없이 사용가능

  • 변수명: 문자, 숫자, (언더바)로 구성될 수 있지만, 시작은 반드시 문자나 로 시작

  • 변수 선언: varname=value

$fname=seongmi
$score=90
  • 변수 확인: echo, set
$echo $fname
$set

-> set | grep name 이라고 검색하면 리눅스 상에서 name이라는 변수를 찾을 수 있다.

  • 변수 제거: unset varname
$unset fname
  • 환경변수 선언: export varName=value
$export NAME = lee
$echo $NAME

일반 변수 선언을 하는것에 반해 환경변수로 선언하면 모든 어플리케이션의 변수로 선언되는것이다.
예를들어 PATH=/tmp라고 선언해버리면 기존의 PATH변수의 값들이 덮어써져 문제가 생긴다.

  • 변경주의 환경변수
  1. PATH: 명령어 탐색 경로
  2. HOME: 홈 디렉토리 경로. cd명령 실행시 적용
  3. USER: 로그인 사용자 이름
  4. SHELL: 로그인 shell의 이름

Bash shell 과 Rules

Metacharacters

  • Shell에서 특벼히 의미를 정해놓은 문자들
  • ? () $ ... * % {} [] 등

Quoting Rule

메타문자의 의미를 제거하고 단순 문자로 변경

  • Backslash() \바로뒤의 메타문자는 특별한 의미를 제거
  • Double Quotes("") ""내의 모든 메타문자의 의미를 제거. 단 $,"은 제외
  • Single Quotes('') ''내의 모든 메타문자의 의미를 제거

nesting commands

  • Command치환: 명령어의 실행 결과를 치환하여 명령을 실행
  • Nesting commands
$echo "Today is $(date)"
$echo "Today is 'date'"

위와 같이 작성하면, 실제 날짜가 찍힘
ps 만약 ''로 했으면 안된다.(rule참고)

alias

  • Shell의 명령에 새로운 이름을 부여
  • 명령들을 조합하여 새로운 이름의 명령을 생성

alias 관리 명령

  • alias 등록: alias name='command'
  • alais 확인: alias or alias name
  • alias 삭제: unalias name


다음과 같이 rm 명령어를 통해 바로 삭제가 된다.

alias별칭으로 rm -i를 rm으로 지정해 삭제전 확인절차를 추가한다.

Communication Channels


쉘 스크립트를 실행하면 위와 같이 한가지 input을 집어넣을때 정상/에러 두가지의 output이 나온다.

Redirection

위의 쉘의 실행결과를 터미널이 아닌 파일로 저장하는 방식이다.

Pipeline

  • 명령의 실행결과를 다음 명령어의 입력으로 전달
  • 리눅스의 명령어를 조합하여 사용
  • 기호: command1|command2|command3 (|는 shift+w로 사용)
cat passwd | cut -d: -f 1 | sort | wc -l

예시로 위와같이 여러 명령어를 조합하여 최종결과를 나타낼 수 있다.
즉 pipeline은 1의 실행결과를 2의 입력으로, 2의 실행결과를 3의 입력으로 쓰는 방식이다.

0개의 댓글