외부 프로그램이라는 뜻인데
쉘에서 외부 프로그램을 실행할 때도 있다는 말이다.
키보드 숫자 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 |