Skip to main content

12. External Programs

셸 스크립트 내에서 외부 프로그램이 자주 사용되는데, 몇 가지 기본 제공 명령(echo, which, test가 일반적으로 기본 제공됨)이 있지만 실제로 유용한 명령은 tr, grep, expr, cut 등 유닉스 유틸리티가 많습니다.

백틱(`)은 종종 외부 명령과 연관되기도 합니다. 따라서 백틱에 대해 먼저 설명하겠습니다. 백틱은 묶은 텍스트가 명령으로 실행될 것임을 나타내는 데 사용됩니다. 이것은 이해하기 매우 간단합니다. 먼저 대화형 셸을 사용하여 /etc/passwd에서 전체 이름을 읽습니다:

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

이제 이 출력을 더 쉽게 조작할 수 있는 변수로 가져올 것입니다:

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

따라서 백틱은 단순히 실행하기로 선택한 명령 또는 명령 집합의 표준 출력을 잡는다는 것을 알 수 있습니다. 또한 느린 명령 또는 명령 집합을 실행하고 출력의 다양한 비트를 파싱하려는 경우 성능을 향상시킬 수 있습니다:

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

이 코드는 실행하는 데 시간이 오래 걸릴 수 있으며, 두 번 실행하고 있습니다! 더 나은 해결책은:

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

참고: 나열된 각 파일 사이의 줄 바꿈을 유지하기 위해 $HTML_FILES 주위의 따옴표는 필수입니다. 그렇지 않으면 grep에 파일당 한 줄이 아닌 긴 텍스트 한 줄이 표시됩니다.

이렇게 하면 느린 찾기를 한 번만 실행하여 스크립트의 실행 시간을 대략 절반으로 줄일 수 있습니다. 스크립트의 실행 시간을 대략 절반으로 줄일 수 있습니다.

구체적인 예제는 이 튜토리얼의 14장, 힌트 및 팁 섹션에서 자세히 설명합니다.