DevOps/Shell

Shell Script - 9, External Program

게임이 더 좋아 2022. 11. 25. 17:24
반응형
728x170

외부 프로그램이라는 뜻인데

쉘에서 외부 프로그램을 실행할 때도 있다는 말이다.



키보드 숫자 1 왼쪽에 있는 기호 `를 아는가? 

backtick이라고 부른다.

 

external command와 연관이 있는 문자다.

그렇기 때문에 `에 대해서 먼저 알고가자

 

`은 우선 text를 command로 사용하겠다라는 선언을 하는 것이다.

 

예시를 보면 더 쉽다.

 

 
$ grep "^${USER}:" /etc/passwd | cut -d: -f5
Steve Parker



우선 /etc/passwd 에서 이름을 가져온다.

그렇게 되면 출력이 되는 것을 알 수 있는데

이 출력을 변수에 넣고 싶다면 어떻게 할까??

 

다시 말하자면 command의 결과를 변수에 넣고 싶은데 어떻게 할까??

 

 

그럴 땐 command를 `로 래핑하면 된다.

 

 
$ MYNAME=`grep "^${USER}:" /etc/passwd | cut -d: -f5`
$ echo $MYNAME
Steve Parker



`은 stdoutput을 값으로 가져서 variable에 넣어주는 역할을 한다.

굳이 이래야해? 

echo 에다 직접 넣으면 되잖아?? 라고 할 수 있다.

 

하지만 이렇게 함으로써 slow command나 set of commands(여러 명령) 들을 실행할 때, 쉽게 파싱할 수 있다.

 
#!/bin/sh
find / -name "*.html" -print | grep "/index.html$"
find / -name "*.html" -print | grep "/contents.html$"

 

이렇다면 여러가지가 stdoutput으로 나오게 된다.

더군다나 오래걸린다!! find는 오래걸리는 작업이다. 그걸 2번이나 해야한다!!

 

그래서 아래와 같이 바꾸는 것이 좋다

 

 
#!/bin/sh
HTML_FILES=`find / -name "*.html" -print`
echo "$HTML_FILES" | grep "/index.html$"
echo "$HTML_FILES" | grep "/contents.html$"




여기서 $HTML_FILES는 파일 목록들 사이의 newlines 들을 보존해주는 역할을 해준다.

grep은 여기서 파일마다 1줄씩 보여주는 것이 아니라 긴 줄의 텍스트를 보여준다.

 

이런 식으로 스크립트를 짜면 find를 한번만 하면 된다!

 

즉, html로 끝나는 파일들 모두를 찾고 newline으로 구분지어서 HTML_FILES로 넘기고

그것에 대한 grep을 통해 출력하는 것이다.

 

결국 external command는 

command에 대한 결과를 이용하는 방법이며

variable까지 이어지는 개념이라고 생각하면 된다.

 

반응형
그리드형

'DevOps > Shell' 카테고리의 다른 글

Bash, 쉘 스크립트 시작하기  (0) 2022.12.25
Shell Script - 10, Function  (0) 2022.11.25
Shell Script - 8, Variable(2)  (0) 2022.11.24
Shell Script - 7, Case  (0) 2022.11.24
Shell Script - 6, Test  (0) 2022.11.24