티스토리 뷰

[Shell Script] 리눅스 쉘 파헤치기 -2. 배시(bash) 쉘 구조



 명 칭

 설 명 

 소스 예제

 shbang 줄

 "shbang" 줄은 스크립트의 가장 첫 줄이며, 커널이 스크립트를 어떤 쉘로 해석할 것인지를 알려준다. 

 #!/bin/bash

 주석

 주석은 # 부호를 시작으로 설명이 오며, 실행할 수 없는 문장이다. 

 # 주석처리 

 와일드카드

 와일드카드는 특별한 밤법으로 쉘이 해석하는 글자이다. 와일드카드는 숫자도, 문자도 아니다. 예를 들어 *, ?, []는 파일명의 확장에 사용된다. !는 히스토리 문자, <, >, 2>, >>, | 부호는 표준 입/출력 리다이렉션과 파이프에 사용된다.

!!와일드 카드는 쉘에의해 해석되는 것을 방지하기 위해 역슬래시를 사용하거나 따옴표를 묶어야 한다.

 rm *; ls ??; cat file[1-3]; 

 결과 출력

 화면에 출력하기 위해, echo 명령이 사용된다. 역슬래시나 따옴표로 감싸면 와일드카드는 절대 해당 기능을 할 수 없다.

 echo "이것은 무엇입니까??" 

 지역 변수

 지역변수는 현재 쉘로 제한된다. 스크립트가 끝났을 때나 쉘이 종료되면 더이상 유효하지 않다.

 내장함수 declare 또한 변수를 선언하는 데 사용될 수 있다. 지역변수를 설정하고 값이 할당된다.

 variable_name=value

 declare variable_name=value


 ex) name="gukii"

     x=5

 전역 변수

 전연벽수는 환경변수라고 불리고 export 내장명령으로 생성된다. 현재 실행중인 쉘로 설정되고 이 쉘로부터 파생된 다른 쉘에도 유효하다. 

 export VARIABLE_NAME=value

 declare -x VARIABLE_NAME=value

 export PATH=/bin:/usr/bin:

 변수값 추출

 변수에서 값을 추출하는 데 달러부호가 사용된다.

 echo $variable_name

 echo $name

 echo $PATH 

 사용자 입력 처리

 사용자가 입력하라는 메시지가 표시된다.

 read 명령은 입력줄을 가져오는 데 사용된다. read 명령은 단어로 분리된 라인을 다중 매개변수로 읽을 것이며, 각 단어는 이름이 지정된 변수에 할당될 것이다.

 echo "이름을 입력하세요 : "

 read name

 read name1 name2 ...

 매개변수

 매개변수는 명령줄에서 스크립트로 전달할 수 있다. 위치 매개변수는 스크립트 내부에서 매개변수로 넘어온 값들을 받기 위해 사용된다.

 $ scriptname arg1 arg2 arg3 ...

 스크립트:echo $1 $2 $3 위치 매개변수

 echo $* 모든위치 매개변수

 echo $# 위치 매개변수 개수

 배열

 배시 쉘은 내부 구성요소를 접근하는 방식으로 배열 문법을 지원하며, 0으로 시작한다. 배시 쉘은 declare -a 명령으로 배열이 생성된다.

 declare -a array_name=(word1 word2 word3 ...)

 declare -a fruit=( apples pears plums )

 echo ${fruit[0]}

 명령 치환

 유닉스/리눅스 명령의 결과를 변수에 할당하거나 문자열로 명령의 결과를 사용할 때, 명령을 백쿼트(`)로 묶는다. 또는 백쿼트(`) 대신 $() 형식도 가능하다.

 variable_name=`command`

 variable_name=$( command )

 echo $variable_name

 echo "오늘은 `date`입니다."

 echo "오늘은 $(date)입니다."

 수치연산

 배시 쉘은 정수 연산을 지원한다. declare -i 명령은 정수형 변수로 선언한다. 또는 (( )) 문법(let 명령) 이 연산용 연산자로 사용된다.

 declare -i variable_name

 (( n=5 + 5 ))

 echo $n

 연산자

 배시 쉘은 숫자와 문자열을 검사하는 연산자로 내장 test 명령을 사용한다.

 == 같음

 != 같지 않음

 > 보다 큼

 >= 보다 크거나 같음

 < 보다 작음

 <= 보다 작거나 같음

 && and

 || or

 ! not

 조건문

 if 다음에 조건이 괄호로 묶여서 구성된다. 연산자는 C 연산자와 유사하며, then 키워드는 괄호 다음에 온다. if는 반드시 fi로 끝나야 한다. 새로운 test 명령인 [[ ]] 는 조건문장에서 패턴을 사용할 수 있다. case 명령은 if/else와 동일하다.

 if 구문:

 if command

 then

      명령어결과가 참일 때, 실행구문

 fi

 -----------------------------

 if (( 정수연산 ))

 then

      연산이 참일때, 실행구문

 elif (( 정수연산 ))

 then

      연산이 참일때, 실행구문

 else
      실행구문
 fi
 -----------------------------
 if [[ test할 숫자/문자식 ]]
 then
      연산이 참일때, 실행구문
 elif [[ test할 숫자/문자식 ]]
      연산이 참일때, 실행구문
 else
      연산이 참일때, 실행구문
 fi
 -----------------------------
 case 구문:
 case variable_name in
     pattern 1)
          실행문
          ;;
     pattern 2|pattern 3)
          실행문
          ;;
     *) echo "그 외의 것입니다."
          ;;
 esac

 반복문

 while, untile, for, select 이렇게 네 종류의 반복문이 있다.

 while 반복문은 이어서 [[ ]] 로 묶인 표현이 나오고, do 예약어로 문장이 시작되어 done 예약어로 끝난다. 조건식이 참일 경우 do와 done 사이 내용이 실행된다.

 until 반복문은 while 문과 비슷하다. 다른 점은 조건식이 거짓일 때 실행문이 실행된다는 것이다.

 for 반복문은 단어의 목록을 반복해서 사용한다는 것이다. 시프트를 통해 한 단어를 처리한 후, 다음 단어를 처리한다. 목록의 모든 단어가 시프트 되면 끝낸다.

 select 반복문은 사용자가 번호가 매겨진 항목에서 선택할 수 있는 메뉴 프롬프트를 제공할 때 사용된다. select 문은 보통 case 명령과 함께 사용된다.

 반복문 제어 명령은 break와 continue이다. break 명령은 반복문을 종료하도록 제어하고, continue 명령은 반복문의 끝에 도달하기 전에 반복 조건으로 되돌아가도록 제어한다.

 while command 혹은 [[ 문자식 ]] 혹은 (( 수치식 ))

 do

      반복 실행구문

 done

 -----------------------------

 for variable in word_list

 do

      반복 실행구문

 done

 -----------------------------

 select variable in word_list

 do

      반복 실행구문

 done

 함수

 함수는 쉘 코드의 영역을 정의해서 이름 지정을 할 수 있는 기능이다. 배시 쉘 버전에서는 function 예약어를 사용한다.

 function_name() {

     실행문

 }


이것으로 정리 끗-


댓글