개발자 노트

PATH에서 프로그램 검색 본문

▶ INBOX ◀

PATH에서 프로그램 검색

heeyam 2016. 9. 20. 23:48
반응형

"#!" 는 스크립트를 실행할 셸을 지정하는 선언문이다.

!앞에 #이 붙는다고해서 주석으로 착각하지 말 것!

 

셸 파라미터

$0 : Script를 실행시킬 때 프로그램의 이름이 포함된 첫 번째 문자열이 저장된다.
$1, ...$N : argument들이 순서대로 저장된다. 위치 매개변수( Positional Parameter )라고 불린다.

$? : 가장 최근에 실행된 포그라운드 파이프라인의 종료상태를 가지고 있다.

 

환경변수

$IFS : 입력필드 구분자, Shell 상에서 입력을 읽어들일 때 글자를 구분하기 위한 목적으로 사용되는 문자 목록, 보통은 스페이스, 탭, 개형문자이다.

for문

[사용법]

for 변수 in 반복될 인수

do

실행문

done

 

[예제]

for x in {1..5}

do

echo "$x"

done

for x in $(ls /home)

do

echo "$x는 홈 디렉토리내에 존재합니다"

done

 

if 문

if로 시작해서 fi로 끝난다.

[사용법]

단일 조건 일때 ( 조건이 참이면 실행문 A를 실행하라. )

if [ 조건 ] ( = if [ 조건 ]; then 한줄로도 사용한다 )
then
 실행문 A
fi

두가지 조건일때 ( 조건이 참이면 실행문 A, 거짓이면 B를 실행하라 )

if [ 조건 ]; then
   실행문 A
else
   실행문 B
fi

 

세 가지 조건일 때 ( 조건이 참이면 실행문 A, 아니면 B, 그것도 아니면 C를 실행하라 )

if [ 조건 ]; then
    실행문 A
elif
   실행문 B
else
    실행문 C
fi

 

[예제]

============================
#!/bin/sh
if [ -d test ]; then
    echo " test is directory "
else
    echo " test is not directory "
fi
============================
결과 : 만약에 test가 디렉토리라면 "test is directory"가 출력되고 디렉토리가 아니라면 “test is not directory" 가 출력된다.

 

파일 검사 연산자

-x : 파일이 존재하고 실행 가능한 경우 true

 

산술 비교 연산자

val1 –ne val2

negative, 변수 val1과 변수 val2 다른 경우 true

 

 

함수 작성

함수를 사용하려면 스크립트의 시작부에 정의가 되어 있어야 한다.

함수 명을 쓰면 함수가 호출이 되는데 주의할 것은 호출 코드가 함수 코드보다 반드시 뒤에 있어야 된다. 함수 코드 보다 앞에서 호출 시 오류가 발생한다.

함수의 형식은 다음과 같다.

함수명()

{

       함수 내용

}

 

함수 호출은 인자가 없는 함수는 함수명만 호출하면 되고, 인자가 있는 함수는 함수명 뒤에 인자를 나열해주면 된다.( 괄호는 쓰지 않는다.)

함수 내부에서 넘겨받은 인자를 쓰는 방법은 쉘 프로그램이 인자를 쓰는 방법과 같다.($1, $2, )

 

case문

case문은 여러 가지 조건이 있을 때 특정한 조건을 선택하고자 할때 많이 사용된다.
case 문은 case로 시작해서 esac 로 끝나게 된다.

사용법

case x(변수 : 원하는대로 지정) in
    select [ | select2 ] )
        실행문 ;;
    * )
        실행문 ;;
esac

=====================================
echo "1) kim"
echo "2) lee"
echo "3) park"
echo -n "select your first name ? : "
read name
case $name in
    1)
    echo " your first name is kim " ;;
    2)
    echo " your first name is lee" ;;
    *)
    echo " your first name is park" ;;
esac
=====================================
결과 : $name 변수로 입력받은 값을 case문에서 비교해서 그 입력값과 같은 조건의 명령 행을 실행 시킨다.
위에서 *) 로 나타낸 것은, 1,2가 아닌 값을 입력받았을 때 실행되는 명령행이다.
1,2가 아닌 다른 키가 눌러졌을때는 무조건 “your first name is park”

 

 

변수 분할 방법

POSIX : ${var%${var#?}}

${var%${var#?}} 는 두 개의 중첩된 문자열 슬라이스이다.

안쪽의 호출인 ${var#?} 는 변수 var의 첫 문자를 제외한 모든 것을 추출한다.

(?는 하나의 문자열에 해당하는 정규 표현이다)

다음으로 ${var%pattern} 호출은 일단 지정된 패턴이 안쪽의 호출에 적용되고나면 남아있는 모든 것을 가지고 서브문자열을 생성한다.

즉 안쪽 호출에서 제외된 문자를 가지고 서브문자열을 생성하는 것이다.

 

Bash와 Ksh : ${varname:start:size}

varname에서 start가 가리키는 문자를 시작으로 size가 가리키는 수만큼의 문자를 요구한다.

ex) ${varname:0:1}

위의 예시는 varname의 첫 번째 문자로 이루어진 서브문자열을 생성한다.

 

시스템호출 : $(echo $var | cut -c1)

변수 var의 첫 번째 문자를 추출한다.

 

 

# 참고

http://storycompiler.tistory.com/101

http://www.itmoa.co.kr/gzboard.php?code=techqna&mode=gz_read&Page=5&no=222

http://m.blog.naver.com/baraem2005/20168719811

http://se.uzoogom.com/140

http://anti1346.egloos.com/v/4526423

http://kukuta.tistory.com/85

http://blog.daum.net/_blog/BlogTypeView.do?blogid=02Ql9&articleno=171

https://wiki.kldp.org/HOWTO/html/Adv-Bash-Scr-HOWTO/exit-status.html

 

셸 스크립트 101가지 예제로 정복하는;Dave Taylor

반응형
Comments