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

시스템 관리자를 위한 Bash 스크립팅 시작하기

Bash 셸은 분명히 유일한 셸은 아니지만 가장 강력한 셸 중 하나입니다. 이것은 시스템에서 실행할 명령의 단순한 "세탁 목록"을 넘어서는 진지한 응용 프로그램을 개발해야 하는 시스템 관리자에게 인기 있는 선택이 됩니다. 다른 쉘에 대한 훌륭한 용도가 많이 있습니다(예를 들어 Git 후크의 경우 기본적으로 Tcsh를 사용합니다). 그러나 Bash는 심각한 스크립팅을 위한 쉬운 선택이며 여기에 그 이유가 있습니다.

함수

Bash 스크립트에서 함수를 만들려면 function 키워드를 사용하세요. :

함수 foo {
여기에 # 코드가 있습니다.
}

함수는 코드의 중복성을 줄이는 데 도움이 되기 때문에 프로그래머에게 유용합니다. 코드의 중복성이 감소하면 값을 변경해야 하는 경우 사용할 때마다가 아니라 한 번(해당 기능에서)만 찾으면 되기 때문에 필요한 유지 관리 양이 줄어듭니다.

Bash가 쌓이는 방식

함수는 Tcsh를 제외하고 쉘에서 상당히 잘 지원됩니다.

  • 콘 껍질: Bash와 동일한 구문 사용
  • Zsh: Bash와 동일한 구문 사용
  • 물고기: 맞춤 기능 사용 함수 생성 및 조작 명령
  • Tcsh: 경우에 따라 goto를 사용하여 Tcsh의 기능 부족 문제를 해결할 수 있습니다. 하지만 최적의 선택은 아닙니다.

리디렉션

입력 및 출력 리디렉션은 모든 프로그래밍 및 스크립팅 언어에서 꽤 표준적인 기능이며 쉘을 사용할 때 본질적으로 발생합니다. 당신은 텍스트를 입력합니다; 당신은 출력을 얻을. 일부 쉘은 다른 쉘보다 더 강력하며 Bash는 상상할 수 있는 거의 모든 옵션을 제공합니다.

기본 사항은 간단합니다. > 출력을 리디렉션하는 문자 및 일부 < 입력을 리디렉션할 문자. 그러나 특정 유형의 입력 및 출력에 대한 몇 가지 특수 지정이 있습니다. 예를 들어 오류 메시지는 stderr이라는 스트림으로 이동합니다. , 2>로 지정됨 리디렉션을 위해. 예를 들어 이 명령어는 오류 메시지를 output.log라는 파일로 보냅니다. :

$ ls /void 2> output.log 

Bash가 쌓이는 방식

리디렉션은 셸과 상호 작용할 때 매우 편리한 기능이며 모든 주요 셸이 특정 방식의 리디렉션을 지원하지만 모든 셸에서 모든 기능을 사용할 수 있는 것은 아닙니다.

  • 콘 껍질: Bash와 동일한 구문 사용
  • Zsh: Bash와 동일한 구문 사용
  • 물고기: 부분 지원
  • Tcsh: 부분 지원

출처

셸에서 파일을 소싱할 때 파일을 셸 환경으로 가져오는 것입니다. 대부분의 셸은 이를 능숙하게 처리하지만 일부는 사용자의 편의를 위해 몇 가지 추가 기능을 제공합니다.

예를 들어 소스를 사용하는 경우 Bash에서는 현재 디렉토리에서 참조하는 파일을 검색합니다. 소스할 파일을 찾을 수 없으면 대신 PATH를 검색합니다. 작은 보너스지만 드라이브의 중앙 집중식 위치에 공통 기능을 저장한 다음 환경을 통합 개발 환경(IDE)처럼 취급할 수 있으므로 매우 편리합니다. 함수가 /usr/include에 해당하는 로컬에 있다는 것을 알고 있기 때문에 함수가 저장되는 위치에 대해 걱정할 필요가 없습니다. , 그래서 당신이 그것들을 소싱할 때 당신이 어디에 있든 Bash는 그것들을 찾습니다.

Bash가 쌓이는 방식

Bash는 현재 디렉토리와 PATH를 모두 검색하는 유일한 셸입니다. 소스를 사용할 때 명령 또는 약어(및 POSIX 전용) . 표기법.

키 바인딩

많은 셸을 사용하여 상호 작용 방법을 사용자 지정할 수 있으며 물론 텍스트 기반 인터페이스와의 모든 상호 작용은 입력으로 시작됩니다. Bash에서 현재 키맵을 볼 수 있습니다.

$ bind -V | grep keymap 

키맵을 변경하려면(예:Emacs에서 Vi로):

$ bind 'set keymap vi' 

Bash가 쌓이는 방식

Bash와 Zsh만이 키 바인딩에 내장된 사전 설정을 제공합니다.

이력

Bash는 모든 쉘 중에서 가장 강력한 명령 기록 인터페이스를 가지고 있습니다. 히스토리의 Bash 버전 역 검색, 빠른 호출, 기록 편집(줄 번호로 항목 삭제 포함) 등을 허용합니다. 결합된 다른 모든 셸은 Bash의 히스토리 인터페이스와 일치하지만 어느 것도(일반적으로 Bash를 모방하는 Zsh조차도) 자체적으로 일치하지 않습니다.

기록 조작

기록 명령은 과거와 상호 작용하는 유일한 방법이 아닙니다. Bash에는 쉘 기록에서 명령을 불러오고 수정할 수 있도록 하는 풍부한 속기 표기법 모음이 있습니다.

예를 들어 가장 최근 명령을 다시 실행하려면( history | tail -n1 출력 , 선행 공백 사용 , 여기에서  로 지정됨 ,  history 명령을 기록에서 제외하려면 !!을 입력하기만 하면 됩니다. 배쉬로.:

$ wc -w luarocks.xml
1284 luarocks.xml
$ !!
1284 luarocks.xml

해당 명령의 일부를 다른 것으로 바꾸면서 가장 최근 명령을 실행하려면 문자열 대체를 사용할 수 있습니다.

$ wc -w luarocks.xml
1284 luarocks.xml
$ ^-w^-l
$ wc -l luarocks.xml
214 luarocks.xml

그러한 바로 가기가 많이 있으며 모두 Bash man 및 정보 페이지에 문서화되어 있습니다. 분명히 이러한 트릭 중 많은 부분은 Bash 상호 작용이 너무 반복적이고 일상적이어서 모호하고 무작위로 보이는 키 조합이 유용한 고급 사용자를 위한 것입니다. Zsh는 Bash를 효과적으로 모방하지만 다른 어떤 쉘도 이러한 종류의 최대 효율성을 제공하지 않습니다.

Bash가 쌓이는 방식

Bash의 히스토리 명령은 다른 어떤 쉘과도 비교할 수 없습니다(Zsh는 비슷하지만 줄 번호로 삭제하는 기능과 같은 일부 옵션이 부족함).

연관 배열

대부분의 셸은 인덱스 배열을 생성, 조작 및 쿼리하는 기능을 제공합니다. 일반 영어에서 인덱스 배열은 숫자가 접두사로 붙은 항목의 목록입니다. 이 목록은 할당된 번호와 함께 단일 변수로 편리하게 래핑되어 코드에서 쉽게 "이동"할 수 있습니다.

그러나 Bash에는 연관 배열을 생성하는 기능이 포함되어 있으며 이러한 배열을 다른 배열과 동일하게 취급합니다. 연관 배열을 사용하면 번호가 매겨진 값 대신 키와 값 쌍의 목록을 만들 수 있습니다.

연관 배열의 좋은 점은 키가 임의적일 수 있다는 것입니다.

$선언 -A userdata
$ userdata[name]=set
$ userdata[pass]=8eab07eb620533b083f241ec4e6b9724
$ userdata[login]=`날짜 --utc +%s`

아무 키나 쿼리:

$ echo "${userdata[name]}"
set
$ echo "${userdata[로그인]}"
1583362192

배열에서 기대할 수 있는 대부분의 일반적인 배열 작업을 사용할 수 있습니다.

Bash가 쌓이는 방식

Bash는 연관 배열을 완벽하게 지원하는 유일한 쉘입니다(다시 말하지만 Zsh는 가깝지만 키를 나열하는 기능이 부족합니다).

쉘 스크립팅을 위해 Bash 선택

Bash의 일부 편의 기능은 POSIX와 호환되지 않습니다. 이론적으로 이는 Bash가 없는 시스템에서 예상대로 실행되지 않는 Bash 스크립트를 작성할 수 있음을 의미합니다. 그런 일이 발생하면 스크립트가 "이식 가능"하지 않다고 합니다.

그러나 실제로 Bash는 무료 및 오픈 소스 소프트웨어이므로 Linux, BSD, OpenIndiana, Windows 또는 macOS를 실행하든 누구나 설치할 수 있습니다. Bash를 설치하면 사용자가 Bash를 기본 셸로 사용하거나 의식적으로 실행할 필요가 없습니다. 좋은 셸 스크립트는 최상위 shebang에서 사용하는 셸을 식별하기 때문입니다. 줄(#!/bin/bash , 예).

확실하지 않은 경우 Bash를 셸 스크립트의 종속성으로 포함하여(유일한 종속성일지라도) 문서에 Bash 스크립트가 일반 셸 스크립트가 아니라 Bash 스크립트임을 경고합니다.

Bash에는 많은 편의가 있으며 사용자가 Bash를 설치했는지 여부에 대한 우려보다 그런 것이 더 중요하다는 것을 알았습니다. Python, Java 또는 기타 소프트웨어와 마찬가지로 때때로 종속성이 있습니다. Bash를 즐기고 Bash의 단축어와 단축어가 유용하다고 생각한다면 자신을 약식으로 바꾸지 마십시오.

시스템 관리자를 위한 Bash 스크립팅에 대한 eBook을 다운로드하세요!