본문 바로가기
IT 기술/프로그래밍관련

[bash] 2nd - 기본 쉘 프로그래밍

by 땅뚱 2012. 8. 10.

shell script

# source <shell_script> 와 ./<shell_script> 의 차이점

- source <shell_script> : 현재 세션에서 실행되는 것처럼 실행

- ./<shell_script> : 현재 쉘이 하위셀을 fork 한 후에 자식셀이 shell_script 의 명령을 처리후 exit


# function

function <function_name> or function() 으로 선언

unset -f <function_name> : 함수 선언 해제

declare -f : 정의된 함수 선언 확인

declare -F : 함수명만 확인할 경우

** builtin : 같은 이름의 함수가 있는 경우 함수가 아닌 bash 의 내장 명령을 사용하도록 강제하는 지시어이다.

type -all <command> : command 에 해당하는 내용에 대한 모든 정의 출력

type -path <command> : command 가 shell / file 인 경우 해당 path 출력

type -type <command> : command 가 alias , keyword, function, builtin, file 인지 체크하여 하나를 출력


# 위치 매개변수 (postional parameter)

$0 : shell script name

$1, $2, $3 : script 실행시 명령행 인자

$* : 모든 매개변수, IFS 의 첫째 글자로 구분해서 출력된다. func "$*" 하게 되면 func은 매개변수를 하나로 받은 셈이 된다.

$@ : 모든 매개변수, 각 매개변수에 대해서 각각 따로 적용됨. 함수 호출시 func "$@" 로 하게 되면 func은 매개변수의 개수만큼의 인자를 받게 된다.

$# : 매개변수의 개수

$var , ${var} 가능 : 왜? $10 을 구분하기 위해서 ${10} 으로 사용 10번째 인자를 표시함. 


# 문자열 연산자

문자열 연사자 문법 : "문자열 연산을 표시하는 특수문자를 해당 변수명과 오른쪽 중괄호 사이에 끼워 넣고, 연산자에 필요한 인자는 연산자 오른쪽에 끼워 넣는다" 는 기본 생각으로 만들어짐

1. 대체 연산자 


  ${varname:-word}

 varname 이 존재하고 값이 NULL이 아니면 varname 을 return. 그렇지 않으면 word 를 리턴

--> 정의하지 않은 변수를 사용할 경우 오류발생시키지 않고, 기본값으로 대체하려고 할 때 사용

 ${varname:=word}

 varname 이 존재하고 값이 NULL이 아니면 varname 을 return. 그렇지 않으면 word 를 리턴. varname 에 위치변수와 매개변수가 올 수 없다. 이 점을 빼고 :- 연산과 동일하다.

 ${varname:?message}

varname 이 존재하고 값이 NULL 이 아니면 varname 을 return. 그렇지 않으면 message 를 출력하고 현재 실행할 명령이나 스크립트를 무시함. message 를 생략하면 parameter null or not set 을 출력함.

--> 정의하지 않은 변수를 사용할 경우 메세지를 출력하고 종료하려고 할 때 사용

 ${varname:+word}

varname 이 존재하고 값이 NULL 이 아니면 word 를 return. 그렇지 않으면 NULL을 return.

--> 변수의 존재유무를 검사하려고 할 때 사용

 ${varname:offset}

 ${varname:offset:length}

 하위 문자열(substrring) 확장을 수행.

--> 문자열의 일부를 돌려주기 위함.


2. 패턴과 패턴 비교

주로 path 에서 filename 을 얻어낼때 많이 사용한다.

${varname#pattern} : pattern 이 varname 의 값 시작 부분과 일치하는 부분이 있으면 이 중 가장 짧은 부분을 삭제하고 나머지부분을 return.

${varname##pattern} : pattern 이 varname 의 값 시작부분부터 일치하는 가장 긴 부분을 삭제하고 나머지를 return

${varname%pattern} : pattern 이 varname 의 값 끝부분부터 일치하는 가장 짧은 부분을 삭제하고 나머지를 return

${varname%%pattern} : pattern 이 varname 이 값 끝부분부터 일치하는 가장 긴 부분을 삭제하고 나머지를 return

${varname/pattern/string} : pattern 이 varname 에서 처음 일치하는 부분을 string 으로 변경

${varname//pattern/string} : pattern 이 varname 에서 일치하는 모든 부분을 string 으로 변경


3. 길이 연산

${#varname} : varname 의 문자열 길이를 return



# 명령 대체

명령(command) 의 표준출력을 변수의 값으로 사용할 수 있는 강력한 기능

문법 : $(Unix command)