Computer >> 컴퓨터 >  >> 프로그램 작성 >> BASH 프로그래밍

Bash 스크립트를 사용한 자동화 소개

Linux 컴퓨터를 가장 밀접하게 실행하고 관리하는 시스템 관리자는 보다 효율적으로 작업하는 데 도움이 되는 도구에 직접 액세스할 수 있습니다. 이러한 도구를 최대한 활용하여 삶을 더 쉽게 만드는 데 도움이 되도록 이 일련의 기사에서는 Bash 셸 스크립트 형태로 자동화를 사용하는 방법을 살펴봅니다. 다음을 다룹니다:

  • Bash 셸 스크립트를 사용한 자동화의 이점
  • 쉘 스크립트를 사용하는 것이 C 또는 C++와 같은 컴파일된 언어보다 시스템 관리자에게 더 나은 선택인 이유
  • 새 스크립트에 대한 요구 사항 집합 만들기
  • 명령줄 인터페이스(CLI) 프로그램에서 간단한 Bash 셸 스크립트 만들기
  • 스크립트를 실행하는 사용자 ID(UID)를 사용하여 보안 강화
  • 논리적 비교 도구를 사용하여 명령줄 프로그램 및 스크립트에 대한 실행 흐름 제어 제공
  • 명령줄 옵션을 사용하여 스크립트 기능 제어
  • 스크립트 내의 하나 이상의 위치에서 호출할 수 있는 Bash 함수 만들기
  • 코드를 오픈 소스로 라이선스하는 이유 및 방법
  • 간단한 테스트 계획 작성 및 구현

이전에 Bash 명령 및 구문에 대한 일련의 기사를 작성했으며 이 기사의 끝에 있는 참조 섹션에서 찾을 수 있는 명령줄에서 Bash 프로그램을 생성했습니다. 그러나 4개의 기사로 구성된 이 시리즈는 Bash 명령 및 구문에 관한 것만큼이나 스크립트(및 내가 유용하다고 생각하는 일부 기술) 작성에 관한 것입니다.

쉘 스크립트를 사용하는 이유

시스템 관리자를 위한 Linux 철학 9장 , 나는 씁니다:

<블록 인용>

"시스템 관리자는 기존 문제를 해결하는 방법과 미래의 문제를 방지하는 방법에 대해 생각할 때, 미래의 문제를 예측하고 예고하는 단서를 찾기 위해 Linux 컴퓨터를 모니터링하는 방법에 대해 생각할 때, [ 그들의] 작업의 효율성을 높이고 매일 또는 일년에 한 번 수행해야 하는 모든 작업을 자동화하는 방법에 대해 생각합니다.

"시스템 관리자는 비생산적인 것처럼 보이면서도 생각해낸 솔루션을 자동화하는 셸 프로그램을 만들 때 다음으로 가장 생산적입니다. 자동화가 많을수록 실제 문제가 발생했을 때 해결하고 방법을 숙고하는 데 더 많은 시간을 사용할 수 있습니다. 우리가 이미 가지고 있는 것보다 더 많이 자동화할 수 있습니다."

이 첫 번째 기사에서는 셸 스크립트가 시스템 관리자에게 중요한 도구인 이유와 매우 간단한 Bash 스크립트를 만드는 기본 사항을 살펴봅니다.

자동화하는 이유

명령줄에서 길고 복잡한 작업을 수행하고 "이제 완료되어 다행입니다. 이제 다시는 그것에 대해 걱정할 필요가 없습니다!"라고 생각한 적이 있습니까? 나는-자주. 나는 궁극적으로 내가 컴퓨터에서 해야 하는 거의 모든 작업(내 것이든 고용주의 것이든 컨설팅 고객의 것이든)이 나중에 언젠가는 다시 해야 한다는 사실을 알게 되었습니다.

물론 나는 항상 내가 그 일을 어떻게했는지 기억할 것이라고 생각합니다. 그러나 종종 다음 시간은 내가 한 적이 있다는 것을 잊어버릴 만큼 충분히 먼 미래입니다 방법은 물론이고 해냈습니다. 하기 위해. 나는 몇 가지 작업에 필요한 단계를 종이에 적기 시작했고 "내가 얼마나 멍청한가!"라고 생각했습니다. 그래서 나는 그 낙서를 내 컴퓨터의 간단한 메모장 응용 프로그램으로 옮겼습니다. 언젠가는 다시 "내가 얼마나 멍청한가!"라고 생각했습니다. 이 데이터를 내 컴퓨터에 저장하려면 셸 스크립트를 만들어 /usr/local/bin과 같은 표준 위치에 저장하는 것이 좋습니다. 또는 ~/bin , 그래서 셸 프로그램의 이름을 입력하기만 하면 수동으로 하던 모든 작업을 수행할 수 있습니다.

나에게 자동화란 작업을 다시 수행하기 위해 작업을 수행한 방법에 대한 세부 정보를 기억하거나 다시 만들 필요가 없음을 의미합니다. 작업 방법을 기억하는 데 시간이 걸리고 모든 명령을 입력하는 데 시간이 걸립니다. 이것은 많은 수의 긴 명령을 입력해야 하는 작업의 경우 상당한 시간 싱크가 될 수 있습니다. 셸 스크립트를 만들어 작업을 자동화하면 일상적인 작업을 수행하는 데 필요한 입력이 줄어듭니다.

쉘 스크립트

스크립트라고도 하는 셸 프로그램을 작성하는 것은 시간을 활용하는 최고의 전략입니다. 쉘 프로그램을 작성하면 필요한 만큼 다시 실행할 수 있습니다. 또한 Linux의 한 릴리스에서 다음 릴리스로의 변경 사항을 보상하기 위해 쉘 스크립트를 업데이트하고, 새 하드웨어 및 소프트웨어를 설치하고, 스크립트로 내가 원하거나 수행해야 하는 작업을 변경하고, 새 기능을 추가하고, 더 이상 필요하지 않은 기능을 제거하고, 내 스크립트에서 그리 드물지 않은 버그를 수정했습니다. 이러한 종류의 변경은 모든 유형의 코드에 대한 유지 관리 주기의 일부일 뿐입니다.

셸 명령을 입력하고 실행하여 터미널 세션에서 키보드를 통해 수행되는 모든 작업은 자동화될 수 있고 자동화되어야 합니다. 시스템 관리자는 우리가 수행하도록 요청받거나 수행해야 할 결정을 모두 자동화해야 합니다. 많은 경우 자동화를 미리 수행하면 처음 시간을 절약할 수 있습니다.

하나의 Bash 스크립트에는 몇 개의 명령에서 수천 개의 명령이 포함될 수 있습니다. 나는 한두 개의 명령으로 Bash 스크립트를 작성했고 2,700줄이 넘는 스크립트를 작성했는데 그 중 절반 이상이 주석입니다.

시작하기

다음은 쉘 스크립트의 간단한 예와 작성 방법입니다. Bash 명령줄 프로그래밍에 대한 이전 시리즈에서 나는 프로그래밍에 관한 모든 책의 "Hello world" 예제를 사용했습니다. 명령줄에서 보면 다음과 같습니다.

[student@testvm1 ~]$ echo "Hello world"
Hello world

정의에 따르면 프로그램 또는 셸 스크립트는 컴퓨터가 실행할 일련의 명령입니다. 그러나 매번 명령줄에 입력하는 것은 특히 프로그램이 길고 복잡할 때 매우 지루합니다. 단일 명령으로 실행할 수 있는 파일에 저장하면 시간이 절약되고 오류가 발생할 가능성이 줄어듭니다.

테스트 시스템이나 가상 머신(VM)에서 루트가 아닌 사용자로 다음 예제를 시도하는 것이 좋습니다. 예는 무해하지만 실수는 발생하므로 항상 안전을 유지하는 것이 현명합니다.

첫 번째 작업은 프로그램을 포함할 파일을 만드는 것입니다. 터치 사용 빈 파일을 만드는 명령, hello , 실행 가능하게 만드십시오:

[student@testvm1 ~]$ touch hello
[student@testvm1 ~]$ chmod 774 hello

이제 즐겨 사용하는 편집기를 사용하여 파일에 다음 줄을 추가합니다.

echo "Hello world"

파일을 저장하고 명령줄에서 실행합니다. 별도의 셸 세션을 사용하여 이 시리즈의 스크립트를 실행할 수 있습니다.

[student@testvm1 ~]$ ./hello 
Hello world!

이것은 당신이 만들 수 있는 가장 간단한 Bash 프로그램으로, 파일에 있는 단일 명령문입니다. 이 연습에서는 이 간단한 Bash 문을 중심으로 전체 셸 스크립트가 작성됩니다. 프로그램의 기능은 이 목적과 관련이 없으며 이 간단한 명령문을 사용하면 기능적 목적의 논리에 신경 쓰지 않고 프로그램 구조(다른 프로그램의 템플릿)를 작성할 수 있습니다. 아주 간단한 방법으로 기본 프로그램 구조와 템플릿 생성에 집중할 수 있으며, 복잡한 기능의 프로그램이 아닌 템플릿 자체를 만들고 테스트할 수 있습니다.

쉬뱅

스크립트에 사용된 명령과 호환되는 Bash 또는 셸을 사용하는 한 단일 명령문이 제대로 작동합니다. 스크립트에 쉘이 지정되지 않은 경우 기본 쉘이 스크립트 명령을 실행하는 데 사용됩니다.

다음 작업은 다른 셸이 기본값인 경우에도 Bash 셸을 사용하여 스크립트가 실행되도록 하는 것입니다. 이것은 shebang 라인으로 수행됩니다. Shebang은 #!을(를) 설명하는 괴상한 방법입니다. 스크립트를 실행할 때 사용할 쉘을 명시적으로 지정하는 문자. 이 경우 Bash이지만 다른 쉘이 될 수 있습니다. 지정된 셸이 설치되어 있지 않으면 스크립트가 실행되지 않습니다.

스크립트의 첫 번째 줄에 shebang 줄을 추가하면 다음과 같이 됩니다.

#!/usr/bin/bash
echo "Hello world!"

스크립트를 다시 실행하십시오. 결과에 차이가 없어야 합니다. 다른 쉘(ksh, csh, tcsh, zsh 등)이 설치되어 있는 경우 하나를 시작하고 스크립트를 다시 실행하십시오.

스크립트와 컴파일된 프로그램 비교

모든 것을 자동화하는 프로그램을 작성할 때 시스템 관리자는 항상 쉘 스크립트를 사용해야 합니다. 쉘 스크립트는 ASCII 텍스트 형식으로 저장되기 때문에 컴퓨터처럼 사람도 쉽게 보고 수정할 수 있습니다. 쉘 프로그램을 검사하여 정확히 무엇을 하는지, 구문이나 논리에 명백한 오류가 있는지 여부를 확인할 수 있습니다. 이것은 개방의 의미를 보여주는 강력한 예입니다. .

일부 개발자는 쉘 스크립트를 "진정한" 프로그래밍보다 못한 것으로 간주한다는 것을 알고 있습니다. 쉘 스크립트와 이를 작성하는 사람들의 주변화는 실행 가능한 코드를 생성하기 위해 소스 코드에서 컴파일되어야만 하는 유일한 "진정한" 프로그래밍 언어라는 생각에 근거한 것 같습니다. 나는 이것이 절대적으로 사실이 아님을 경험으로 말씀드릴 수 있습니다.

저는 BASIC, C, C++, Pascal, Perl, Tcl/Expect, REXX(Object REXX를 포함한 일부 변형), 많은 쉘 언어(Korn, csh 및 Bash 포함), 심지어 일부 어셈블리를 포함한 많은 언어를 사용했습니다. 언어. 지금까지 고안된 모든 컴퓨터 언어에는 한 가지 목적이 있습니다. 인간이 컴퓨터에게 무엇을 하라고 지시할 수 있도록 하는 것입니다. 프로그램을 작성할 때 선택한 언어에 관계없이 컴퓨터에 특정 작업을 특정 순서로 수행하도록 지시하는 것입니다.

스크립트는 컴파일된 언어보다 훨씬 빠르게 작성 및 테스트할 수 있습니다. 프로그램은 일반적으로 상황이나 머리가 나쁜 상사에 의해 부과되는 시간 제약을 충족하도록 신속하게 작성되어야 합니다. 시스템 관리자가 작성하는 대부분의 스크립트는 문제를 수정하거나, 문제의 여파를 정리하거나, 컴파일된 프로그램이 작성 및 테스트되기 훨씬 전에 작동해야 하는 프로그램을 전달하기 위한 것입니다.

프로그램을 빠르게 작성하려면 쉘 프로그래밍이 필요합니다. 쉘 프로그래밍은 고객의 요구에 신속하게 대응할 수 있기 때문입니다. 로직에 문제가 있거나 코드에 버그가 있으면 거의 즉시 수정하고 다시 테스트할 수 있습니다. 원래 요구 사항 집합에 결함이 있거나 불완전한 경우 새 요구 사항을 충족하도록 셸 스크립트를 매우 빠르게 변경할 수 있습니다. 일반적으로 sysadmin의 작업에서 개발 속도에 대한 필요성은 프로그램을 가능한 한 빨리 실행하거나 RAM과 같은 시스템 리소스를 가능한 한 적게 사용하는 필요성보다 우선합니다.

시스템 관리자가 수행하는 대부분의 작업은 실행보다 수행 방법을 파악하는 데 더 오래 걸립니다. 따라서 수행하는 모든 작업에 대해 셸 스크립트를 만드는 것은 비생산적으로 보일 수 있습니다. 스크립트를 작성하고 재현 가능한 결과를 생성하고 필요한 만큼 여러 번 사용할 수 있는 도구로 만드는 데는 시간이 걸립니다. 작업 수행 방법을 (다시) 알아낼 필요 없이 스크립트를 실행할 수 있을 때마다 시간이 절약됩니다.

최종 생각

이 기사는 셸 스크립트를 만드는 방법에 대해 자세히 설명하지 않았지만 아주 작은 셸 스크립트를 만들었습니다. 또한 쉘 스크립트를 작성하는 이유와 시스템 관리자에게 쉘 스크립트가 컴파일된 프로그램보다 가장 효율적인 옵션인 이유도 살펴보았습니다.

다음 기사에서는 다른 Bash 스크립트의 시작점으로 사용할 수 있는 Bash 스크립트 템플릿을 만들기 시작할 것입니다. 템플릿에는 궁극적으로 도움말 기능, GNU 라이선스 설명, 여러 가지 간단한 기능, 이러한 옵션을 처리하는 일부 논리 및 이 템플릿을 기반으로 하는 스크립트에 필요할 수 있는 기타 요소가 포함됩니다.

리소스 

  • Bash로 프로그래밍하는 방법:구문 및 도구
  • Bash로 프로그래밍하는 방법:논리 연산자 및 셸 확장
  • Bash로 프로그래밍하는 방법:루프

이 기사 시리즈는 David Both의 Linux 자체 학습 과정인 3부로 구성된 Linux 사용 및 관리 - Zero to SysAdmin의 2권 10장을 부분적으로 기반으로 합니다.