728x90
반응형

매주 스터디 내용을 올리려고 했는데.. 한번씩 정리하는게 은근 빡세네요.. _-;

 

어찌됐든.. 5주차에는 배시쉘 문법 정리를 하면서, 예제 스크립트들을 각자 작성해 보는 시간을 가졌습니다.

 

 

> Bash Shell

  - 배시쉘 문법은 기본적으로 본쉘 문법에서 확장된 형태입니다. 본쉘에서 지원하지 않는 여러 추가 문법 요소가 있습니다. 

   원래는 이번주에 기존 본쉘로 작성했던 스크립트를 배시쉘로 변환하는 작업을 하려고 했는데, 

   기본 문법이 동일하다 보니 큰 의미가 없을 것 같아서 해당 과정은 건너뛰고, 배시쉘 문법에 대해서 쭉 정리를 하고

   간단한 예제를 작성해 보았습니다.


1. Bash Shell 문법 정리

 

- 스크립트의 첫 라인은 #!/bin/bash 로 시작한다.

 

- # 으로 해당 라인을 주석처리 한다.

 

- 입력은 read 키워드로 받을 수 있다.

 

- 산술연산 :

   declare -i 변수명 (변수는 0으로 초기화 됨)

 ex)

declare -i num

num=10+10 # 빈칸 허용 안됨

num="5 * 5" # 빈칸을 사용 시 큰따옴표로 묶어야 함

 

- 진수 표기법 : 변수명=진수#숫자

 ex)

x=2#011

echo $x

3

 

- let : 정수형 산술 연산을 수행하고 숫자 표현식을 테스트 한다.

 ex)

i=10

let i=i+10

echo $i

20

 

let "i+=5"

echo $i

25

 

i=+5  # i = i + 5 와 동일

i=*5  # i = i * 5 와 동일

i=/5  # i = i / 5 와 동일

i=%5  # i = i % 5 와 동일

 

- 실수형 : bash에서는 정수형 연산만을 지원한다. 실수 연산시에는 bc / awk를 사용한다.

 ex) 

n=`echo "scale=2; 20 / 3" | bc`

echo $n

6.66

 

m=`awk -v x=2.66 -v y=5.22 'BEGIN{printf "%.2f\n", x*y}'`

echo $m

13.39

 

- 위치파라미터 : 명령라인 인자들을 스크립트로 전달한다.

$0 : 실행한 스크립트명

$# : 위치파라미터 전체 개수

$* : 모든 파리미터 목록

$1 ~ $9 ~ ${10} ~ : 각 위치파라미터 참조 (${10} 이상은 중괄호로 감싸야함)

 

- 종료상태 : 성공인 경우 0 / 실패인 경우 0이 아닌 숫자

 ex)

name=multi

grep "$name" /etc/passwd

echo $?   #마지막  실행 명령의 종료상태 확인

0  # 0이므로 해당 문자열 찾음

 

name=centos

grep "$name" /etc/passwd

echo $?

1  # 0이 아니므로 해당 문자열 찾지 못함

 

- [ ] : 표현식을 판단하기 위해 사용한다.

 ex)

x=10

y=20

[ $x -gt $y ]

echo $?

1

 

- exit : 프로그램을 종료 시 사용한다.

  exit 숫자 (숫자는 0 ~ 255)

 

- null 값 체크 방법 :

  name=$1

  if [ "$name" == "" ]  # [ ! "$name" ] 또는 [ -z "$name" ]

 

- if 

if 조건

then

명령

fi

 

if 조건

then

명령

elif 조건

then

명령

else

명령

fi

 

- case

case 변수 in

value1)

명령

;;

value2)

명령

;;

*)

명령

;;

esac

 

- for

for 변수 in 단어목록

do

명령

done

 

 ex)

hi.sh 

#!/bin/bash

for name in $*

do 

echo $name hi

done

 

./hi.sh linux centos script

linux hi

centos hi

script hi

 

- while

while 조건

do

명령

done

 

- until

until 조건

do

명령

done

 

- select

select 변수명 in 단어목록

do

명령

done

 

 ex)

run.sh

#!/bin/sh

 

PS3="실행할 프로그램을 선택하세요. : "

select program in 'ls -F' pwd date exit

do

$program

done

 

./run.sh

1) ls -F

2) pwd

3) date

4) exit

실행할 프로그램을 선택하세요. : 2

/root/script

실행할 프로그램을 선택하세요. : 3

Thu Jul 23 13:55:51 KST 2009

실행할 프로그램을 선택하세요. : 4

 

- shift : 지정한 수만큼 좌측으로 파라미터 목록을 이동시킨다.

  형식 : shift n (n이 생략된 경우에는 좌측으로 1회 이동

 ex)

shift_while.sh

#!/bin/bash

 

while (( $# > 0 ))

do

echo $*

shift

done

 

./shift_while.sh 사과 배 복숭아

사과 배 복숭아

배 복숭아

복숭아

 

shift_date.sh

#!/bin/bash

 

set $(date)

while (( $# > 0 ))

do

echo $1

shift

done

 

./shift_date.sh

Thu

Jul

23

14:30:54

KST

2009

 

- break : 반복문(while/for/until)을 종료 시 사용

 ex)

#!/bin/sh

 

while true

do

echo "리눅스를 사용해 보신 적이 있나요[y/n]? :"

read answer

if [[ "$answer" == [Yy] ]]

then

break

else

echo "리눅스를 사용해본 경험이 없군요."

fi

done

echo "리눅스 사용자이시군요."

 

- continue : 해당 루프의 최상위로 이동한다.

 ex)

#!/bin/bash

 

for name in $(cat mail_list)

do

if [[ $name == multi ]]

then

continue

else

mail $name < mail_content.txt

fi

done

 

- 중첩 루프와 루프 관리 :

  continue n : n 번째 루프의 시작으로 이동

  n : 가장 안쪽 루프가 1 / 그 다음 바깥쪽 루프가 2 / ...

 

- 백그라운드 실행 : 끝에 & 를 붙이면 해당 스크립트를 백그라운드로 실행시킨다.

#!/bin/bash

 

for person in root multi linux centos

do

mail $person < mail.txt

done &

 

 

2. Bash Shell 예제

 - 배시쉘 문법 요소 중 array를 사용한 간단한 예제를 작성해 본다.

 

- array를 사용하여 1부터 10까지 차례대로 출력하는 스크립트를 작성하시오.

ex1) for문 사용

#!/bin/bash

array=(1 2 3 4 5 6 7 8 9 10)

 

array_length=${#array[*]}

 

for (( i = 0; i < $array_length; i++ ))

do

echo ${array[$i]}

done

 

ex2) while문 사용

#!/bin/bash

declare -i count

count=0

 

while [ $array_length -gt $count ]

do

echo ${array[$count]}

count+=1

done

 

 

 

.. 이외에도 좀 더 많은 문법 요소가 있지만.. 더 자세한 내용은 앞으로 스크립트를 작성해 보면서 필요할 때마다 찾아보기로 하였습니다. ^^;

 

6주차에는 awk 문법 정리 및 샘플 로그 파일을 가지고 간단한 예제를 작성해 보았는데.... 곧 정리해서 올리도록 하겠습니다. ㅠ.ㅠ

 

그리고 한주 정도 더 정규표현식과 awk 예제를 학습하고 나서, 파이썬을 공부할 예정입니다.

 

관심 있으신 분은 아래 사이트를 참고하여서 미리 학습하셔도 좋을 것 같습니다.

기본 문법 위주로 정리가 잘 되어 있고, 분량도 많지 않아서 처음 파이썬을 공부하기에 적당할 것 같습니다.

http://wikidocs.net/book/1 

http://wikidocs.net/book/2 

728x90
반응형
블로그 이미지

nineDeveloper

안녕하세요 현직 개발자 입니다 ~ 빠르게 변화하는 세상에 뒤쳐지지 않도록 우리모두 열심히 공부합시다 ~! 개발공부는 넘나 재미있는 것~!

,