[과제] Bash(Shell Script) 정리

강세준·2023년 1월 2일
0

nhn

목록 보기
2/7

Bash(Shell Script) 정리

Shebang(셔뱅)

해쉬기호와 느낌표(#!)로 이루어진 문자 시퀀스로 스크립트에 맨 처음에 오게된다.
셔뱅이 있는 스크립트는 유닉스 계열 운영 체제에서 프로그램으로서 실행되고 프로그램 로더가 스크립트의 첫 줄을 제외한 나머지 부분을 인터프리터 지시자로 구문 분석을 수행한다.
셔뱅의 시작이 #인 이유는 수 많은 인터프리터 언어가 #문자를 주석 표시자로 사용하기 때문에 일부 언어는 인터프리터 목적에 맞게 셔뱅 줄을 무시하기도 한다.

#!interpreter [optional-arg]
#!/bin/bash
#!/usr/bin/python
#!/usr/bin/perl -T

인터프리터는 절대 경로여야 하고 옵션 인자는 선택사항이지만 넣을 경우 하나의 변수여야 한다.

Shell 종류

프롬프트특징
sh$초기 Unix 셸, 명령 프로그래밍 언어 기능을 가짐
bash#IEEE POSIX 호환, Borune Shell(sh)의 변종
csh%C프로그램 스타일의 셸
ksh$Unix에서 가장 많이 사용되는 셸, sh의 기능 확장
zsh%Korn Shell의 기능을 포함하여 개발된 셸

환경에 따른 인터프리터 경로 불일치 문제 (env 이용)

env는 현재 환경을 표시하거나 명령 실행을 위한 환경을 설정하는 명령어이다.
구성된 환경마다 인터프리터의 설치 경로가 다를 수 있기 때문에 대부분의 환경에서 동일한 경로로 설정된 env를 통해 셔뱅을 사용하면
env가 사용할 언어의 위치를 찾아 실행시켜주는 역할을 수행해주기 때문에 경로 불일치 문제를 해결할 수 있다.

#!/usr/bin/env bash
#!/usr/bin/env python
#!/usr/bin/env perl

입출력

echo

문자열, 변수등을 터미널에 출력하는 명령어

echo test output.

test output.

echo 옵션 정리

옵션 기능
-n출력시 마지막에 따라오는 개행문자를 출력하지 않음
-e역슬래시(/)와 조합되는 이스케이프 문자를
인용 부호를(")로 묶으면 사용할 수 있도록 함

read

사용자로 부터 입력을 받을 수 있는 명령어

read 옵션 정리

옵션 기능
-p옵션 뒤 문자열을 입력하여 프롬프트에 문자열을 출력할 수 있다
-a입력을 배열(Array)형태로 저장한다.
-n옵션뒤 숫자를 입력하여 해당하는 수만큼 문자를 입력받을 수 있다.

변수

1. 전역변수(global variable)

현재 Shell Script의 모든 scope에서 사용가능한 변수
선언된 변수는 기본적으로 전역 변수이다.

2. 지역변수(local variable)

특정 scope에서만 사용가능한 변수
변수명 앞에 local 명령어를 붙이면 지역변수로 사용할 수 있다.

3. 환경변수

응용소프트웨어가 설정을 위해 참조하는 변수
export 명령어를 이용해 사용 가능하다.

4. 예약변수

Shell Script에 미리 정의된 변수
${예약변수명}으로 사용 가능 하다.

변수 사용

  • 변수 사용시 "=" 앞 뒤에 공백없이 입력하면 대입연산자로 활용된다.
  • 변수명은 대소문자를 구분하지 않는다.
  • 변수명에 할당된 값은 모두 문자열로 인식한다.
  • 변수의 해제는 unset을 사용한다.
  • 할당된 변수를 사용하기 위해서는 $, ${변수명}을 사용한다.

배열

  • 배열 변수는 괄호를 입력하여 사용할 수 있다.
  • 1차원 배열만 지원한다

연산자

산술 연산자

  • `expr `을 사용하여 산술 연산자를 사용할 수 있다.
  • 변수 처리를 통해 사용할 수 있다.
#!/usr/bin/env bash
  
a=1
b=2
result1=`expr $a + $b` # expr 사용방법 
result2=$((a+b)) # 변수 처리를 사용한 방법

관계 연산자

  • 숫자 값인 경우
연산자설명
-eq두 값이 같을때 true, 다를때 false
-ne두 값이 같을때 flase, 다를때 true
-gt초과 시 true
-lt미만 시 true
-ge이상 시 true
-le이하 시 true
==같을 때 true
  • 문자열일 경우
연산자설명
=같을 때 true
!=다를 때 true
-zlength가 0일때 true
-nlength가 0이 아니면 true

논리 연산자

연산자설명
-aand
-oor
!not

조건문

if문

  • 조건문 내부에 실행 문장이 없으면 오류가 발생한다.
  • if와 대괄호 사이에는 반드시 공백이 필요하다.
#!/usr/bin/env bash
  
if [condition1]; then
	# execution command
elif [condition2]; then
	# execution command
else 
	# execution command
fi # 종료

case문

  • 정규식을 지원하고 대소문자를 구별한다.
  • 각 조건의 끝에는 ;;기호로 끝을 표시한다.
#!/usr/bin/env bash
  
case var in 
	case1) #var과 case1이 일치할때 조건 실행
    	# case1 command
    ;;
	case2)
    	# case2 command
    ;;
	case3)
    	# case3 command
    ;;
esac 
# case문 종료

반복문

for문

  • in 뒤에 배열, 리스트 및 다양한 방법으로 값을 지정해 줄 수 있다.
#!/usr/bin/env bash
#example 1
for var in range
do
	# execution command
done

#example 2
for ((var=init ; var < condition ; var++))
do
	# execution command
done

#example 3
for var in {start..end..inc}
do
	# execution command
done

while문

  • 수행조건이 true일때 실행된다.
#!/usr/bin/env bash
                                
while [condition]; do
	# execution command
done

until 문

  • 수행조건이 false일때 실행된다.
#!/usr/bin/env bash
                                
until [condition]; do
	# execution command
done

-조건문 명령어 -
반복문 탈출 : break
조건 건너 뛰기 : continue


함수

함수 안에서 다양한 셸 명령어들을 호출 할 수 있다.
함수의 정의는 다음과 같이 할 수 있다.

#!/usr/bin/env bash
  
#함수 정의
function func_name() {
	# function command
}

#함수 호출
func_name

인자

함수에서 인자를 받아 매개 변수로 사용하는 방법

#!/usr/bin/env bash
  
function example() {
	echo $1 $2 "$3"
} 

example 123 first \*
 

함수 뒤에 공백을 기준으로 받는 인자값들을 $1부터 시작하여 매개 변수로 사용할 수 있다.

  • 사용할 매개 변수의 개수가 10개가 넘어가면 {}로 감싸주어야 한다. ex) ${10}
  • 특수 문자를 넘길때 백슬래시(\)를 사용하여 문자로 형태로 넘겨 주고
    쌍따옴표 혹은 따옴표로 묶어서 문자 형태로 인식시켜 사용할 필요가 있다.

함수 값 리턴 방법

1.echo 명령어를 사용하여 리턴하는 방법

  • bash에서 사용하는 가장 일반적인 방법
#!/usr/bin/env bash

function example() {
	var=22
  	echo ${var}
}
#함수 example의 결과를 var2변수에 넣는다  
var2=$(example)

2.전역변수로 전달하는 방법

  • 셸 스크립트에서 변수는 기본적으로 전역 변수이기 때문에 가능한 방법
#!/usr/bin/env bash

global_var=""

function global_example() {
	global_var="hello"
}

global_var
echo ${global__var}  

3.return 명령어를 사용하여 리턴하는 방법

  • return으로는 정수 1~255만 전달 가능하다. (Exit Status 전달, $?로 확인 가능)
#!/usr/bin/env bash

function return_example() {
	return 77;  
}

echo $?

셸 스크립트에서 리눅스 커맨드 사용법

변수에 ``(백틱)을 사용을 사용하여 리눅스 커맨드의 결과를 등록하여 사용할 수 있다.

#!/usr/bin/env bash

Info=`ls -l`
echo $Info
  • 커맨드 내부에 '(따옴표)를 사용할때 내부에 변수를 사용해야할 경우 ''로 한번더 묶어주면 사용할 수 있다.
    ex) sed -i '/'{위치값을 포함한 변수}'s/...'

참고

https://unabated.tistory.com/entry/LinuxUnix%EC%89%98-Shell-%EC%9D%98-%EC%A0%95%EC%9D%98%EC%99%80-%EC%A2%85%EB%A5%98
https://jangseongwoo.github.io/shell_script/shell_script_basic/
http://wiki.redjini.com/linux
https://zetawiki.com/wiki/Bash_%ED%95%A8%EC%88%98_%EB%B0%98%ED%99%98_%EA%B0%92_%EB%B0%9B%EA%B8%B0

profile
데이터를 탐구하는 개발자

0개의 댓글