FIF's 코딩팩토리

리눅스 BASH Shell 프로그래밍 기초(2) 본문

Linux(리눅스)

리눅스 BASH Shell 프로그래밍 기초(2)

FIF 2019. 5. 10. 10:46
반응형

이번시간에는 파이프와 변수에 대해 공부해보겠습니다.

 

 

 파이프(pipes)

이 장에서는 파이프를 사용하는 간단하면서도 실질적인 예를 들어 보겠다.


 파이프로 무엇을 할 수 있을까

파이프는 정말 간단한 방법으로, 한 프로그램에서의 출력을 다른 프로그램의 입력으로 보낸다. 이렇게 "흘려 보내기"때문에 파이프다.... 라고 생각하면 딱 맞을 것이다. ^^


 예제 : sed를 이용한 아주 간단한 파이프 예제

다음은 파이프를 이용하는 가장 간단한 실례이다.

ls -l | sed -e "s/[aeio]/u/g"

그러면 한번 위 내용을 찬찬히 살펴보자. 먼저 'ls -l' 명령이 실행되었다. 그리고 이 결과는 화면에 출력되는 대신, 파이프를 타고 sed 프로그램에 전달되어 다시 한번 처리된 후 화면에 출력된다.


 예제 : 'ls -l *.txt'의 색다른 형태

아마도 이 방법은 'ls -l *.txt'를 사용하는 것 보다는 까다로운 것이겠지만, 파이프의 사용에 대해서만큼은 확실히 보여줄 수 있다.

ls -l | grep "\.txt$"

여기서 'ls -l'의 결과는 grep으로 넘어가, "\.txt$"라는 조건에 맞는 값만을 화면에 출력한다. 이 결과는 'ls -l *.txt'와 같다.


변수

다른 프로그래밍 언어를 사용할 때와 마찬가지로, 셸 프로그래밍을 할 때도 변수를 사용할 수 있다. 게다가 bash에서는 데이터 타입을 미리 정할 필요 없이, 숫자나 문자, 혹은 문자열을 지정할 수 있다.

어떤 변수가 처음 사용되는 순간 참조가 생성되므로, 변수를 따로 선언할 필요는 없다.


 예제 : 변수를 사용한 Hello World! 출력

#!/bin/bash

STR="Hello World!"

echo $STR

2번째 줄에서 STR이라는 이름의 변수가 생성되며 "Hello World!"를 받았다. 이 변수에 들어있는 값을 사용하기 위해서는 '$'를 변수 이름 앞에 사용하여 이것이 변수라는 사실을 알려 주어야 한다. 변수 이름 앞에 '$'를 빼놓았을 경우에는 예상했던 것과는 다른 결과가 나올 것이다. 예컨대, 이런 경우 셸은 이 변수 자체를 문자열로 인식해 버리거나 하기 때문에 주의해야 한다.


5.2. 예제 : 여전히 간단한 백업 스크립트

#!/bin/bash

OF=/var/my-backup-$(date +%Y%m%d).tgz

tar -cZf $OF /home/me/

이 스크립트는 앞서 살펴본 것과는 질적으로 다른 물건이다. 일단 이것은 생성 날짜가 파일 이름이 되기 때문에 파일명이 중복되지 않아, 백업하기 용이하다. 두 번째 줄의 '$(date +%Y%m%d)'가 바로 그 부분이다. 매일 파일 이름이 달라진다는 것을 알 수 있다. date는 원하는 대로 옵션을 조절하여 다른 포맷으로 출력할 수도 있으니 확인해 보자. 또한 이 스크립트를 실행하면 명령 실행 과정이 화면에 그대로 출력된다는 점도 참고해 두자.

참고할 만한 것을 좀 보자. 다음 내용을 각각 직접 실행해 보자.

echo ls

echo $(ls)

무엇이 다른지 확인하고, 왜 다른지도 알아보자.


5.3. 지역 변수

지역 변수는 local이라는 키워드를 사용하여 생성된다.

#!/bin/bash

HELLO=Hello

function hello {

local HELLO=World

echo $HELLO

}

echo $HELLO

hello

echo $HELLO

이 예제는 지역 변수를 사용하는 방법에 대한 것이다. 이미 프로그래밍 언어를 조금이라도 다루어 보았다면 이런 방식의 코드를 본 적이 있을 것이다. 여기에서는 함수를 호출하는 방법에도 주의하자.

반응형
Comments