Unix의 원래 희망 중 하나는 일상적인 컴퓨터 사용자가 고유한 작업 스타일에 맞게 컴퓨터를 미세 조정할 수 있도록 하는 것이었습니다. 컴퓨터 사용자 지정에 대한 기대치는 수십 년 동안 줄어들었고 많은 사용자는 자신의 앱과 웹 사이트 모음을 "사용자 지정 환경"으로 간주합니다. 그 이유 중 하나는 많은 운영 체제의 구성 요소가 열려 있지 않기 때문에 일반 사용자가 소스 코드를 사용할 수 없기 때문입니다.
그러나 Linux 사용자의 경우 전체 시스템이 터미널을 통해 사용할 수 있는 명령을 기반으로 하기 때문에 사용자 지정 프로그램을 사용할 수 있습니다. 터미널은 빠른 명령이나 심층적인 문제 해결을 위한 인터페이스가 아닙니다. 일상적인 작업을 대신 처리하여 작업량을 줄일 수 있는 스크립팅 환경입니다.
프로그래밍을 배우는 방법
프로그래밍을 한 번도 해본 적이 없다면 두 가지 다른 문제로 생각하는 것이 도움이 될 것입니다. 하나는 코드 작성 방법을 이해하는 것이고 다른 하나는 작성할 코드를 이해하는 것입니다. 구문을 배울 수 있습니다. —그러나 언어로 어떤 단어를 사용할 수 있는지 알지 못하면 멀리 갈 수 없습니다. . 실제로는 배열할 단어 없이 구문을 배울 수 없기 때문에 두 개념을 동시에 배우기 시작하므로 처음에는 기본 명령과 기본 프로그래밍 구조를 사용하여 간단한 작업을 작성합니다. 기본 사항에 익숙해지면 더 많은 언어를 탐색하여 프로그램이 점점 더 중요한 일을 하도록 만들 수 있습니다.
Bash에서 대부분의 단어는 당신이 사용하는 리눅스 명령입니다. 구문 배쉬입니다. 이미 Bash를 자주 사용하고 있다면 Bash 프로그래밍으로의 전환이 비교적 쉽습니다. 그러나 Bash를 사용하지 않는다면 Bash가 명확성과 단순성을 위해 구축된 간단한 언어라는 것을 알게 되어 기쁠 것입니다.
인터랙티브 디자인
때때로, 프로그래밍을 배울 때 가장 어려운 것은 컴퓨터가 당신을 위해 할 수 있는 일입니다. 분명히, 컴퓨터가 스스로 할 수 있는 모든 일을 할 수 있다면 컴퓨터를 다시 만질 필요가 없을 것입니다. 그러나 현실은 사람이 중요합니다. 컴퓨터가 당신을 도울 수 있는 것을 찾는 열쇠는 당신이 일주일 내내 반복적으로 하는 일을 알아차리는 것입니다. 컴퓨터는 특히 반복을 잘 처리합니다.
그러나 컴퓨터에 무언가를 하도록 지시하려면 그 방법을 알아야 합니다. 이것은 Bash가 탁월한 영역인 대화형 프로그래밍입니다. 터미널에서 작업을 수행하면서 스크립트 방법도 배우게 됩니다.
예를 들어, 나는 많은 수의 PDF 책을 잉크가 적고 인쇄하기 쉬운 버전으로 변환하는 임무를 받은 적이 있습니다. 이를 수행하는 한 가지 방법은 PDF 편집기에서 PDF를 열고 수백 개의 이미지(페이지 배경 및 이미지로 계산되는 텍스처) 중 하나를 각각 선택하여 삭제한 다음 새 PDF에 저장하는 것입니다. 이렇게 하면 책 한 권만 있으면 반나절이 걸립니다.
내 첫 번째 생각은 PDF 편집기를 스크립팅하는 방법을 배우는 것이지만 며칠 동안 연구한 후에도 스크립팅할 수 있는 PDF 편집 응용 프로그램을 찾을 수 없었습니다(매우 못생긴 마우스 자동화 해킹 제외). 그래서 터미널 내에서 작업을 수행하는 방법을 찾는 데 주의를 기울였습니다. 그 결과 PostScript의 오픈 소스 버전(프린터 언어 PDF의 기반)인 GhostScript를 비롯한 몇 가지 새로운 발견이 이루어졌습니다. 며칠 동안 작업에 GhostScript를 사용하여 이것이 내 문제의 해결책임을 확인했습니다.
명령을 실행하기 위한 기본 스크립트를 공식화하는 것은 PDF에서 이미지를 제거하고 텍스트 파일에 붙여넣는 데 사용한 명령과 옵션을 복사하는 문제였습니다. 파일을 스크립트로 실행하면 아마도 같은 결과가 나올 것입니다.
Bash 스크립트에 인수 전달
터미널에서 명령을 실행하는 것과 쉘 스크립트에서 명령을 실행하는 것의 차이점은 전자가 대화식이라는 것입니다. 터미널에서는 이동하면서 조정할 수 있습니다. 예를 들어 example_1.pdf를 방금 처리한 경우 다음 문서를 처리할 준비가 되었습니다. 내 명령을 적용하려면 파일 이름만 변경하면 됩니다.
그러나 쉘 스크립트는 대화형이 아닙니다. 사실, 쉘 스크립트가 당신이 그것에 참석하지 않아도되도록 존재합니다. 이것이 명령(및 이를 실행하는 쉘 스크립트)이 인수를 허용하는 이유입니다.
쉘 스크립트에는 스크립트 시작 방법을 반영하는 몇 가지 미리 정의된 변수가 있습니다. 초기 변수는 $0입니다. , 스크립트를 시작하기 위해 발행된 명령을 나타냅니다. 다음 변수는 $1입니다. , 쉘 스크립트에 전달된 첫 번째 "인수"를 나타냅니다. 예를 들어 echo hello 명령에서 , 명령 에코 $0, 그리고 안녕하세요라는 단어 $1입니다. . echo hello world 명령에서 , 명령 에코 $0입니다. , 안녕하세요 $1입니다. 및 세계 $2입니다. .
대화형 셸에서:
$ echo hello world
hello world
비대화형 셸 스크립트에서 다음을 할 수 있습니다. 매우 문자 그대로 동일한 작업을 수행합니다. 이 텍스트를 텍스트 파일에 입력하고 hello.sh로 저장합니다. :
echo hello world
이제 스크립트를 실행하십시오:
$ bash hello.sh
hello world
그것은 작동하지만 스크립트가 입력을 받을 수 있다는 사실을 이용하지 않습니다. hello.sh 변경 이에:
echo $1
따옴표로 묶인 두 개의 인수로 스크립트를 실행합니다.
$ bash hello.sh "hello bash"
hello bash
PDF 축소 프로젝트의 경우 각 PDF를 압축하는 데 몇 분이 걸렸기 때문에 이러한 종류의 비대화형 작업이 정말 필요했습니다. 그러나 내 입력을 수락하는 스크립트를 생성하여 스크립트에 여러 PDF 파일을 한 번에 공급할 수 있었습니다. 스크립트는 각 작업을 순차적으로 처리하므로 30분 이상이 소요될 수 있지만 다른 작업에 사용할 수 있는 30분이었습니다.
흐름 제어
기본적으로 반복해야 하는 작업을 달성하기 위해 수행한 정확한 프로세스의 사본인 Bash 스크립트를 만드는 것은 완벽하게 허용됩니다. 그러나 스크립트를 통해 정보가 흐르는 방식을 제어하여 스크립트를 더욱 강력하게 만들 수 있습니다. 데이터에 대한 스크립트 응답을 관리하는 일반적인 방법은 다음과 같습니다.
- 만약/그러면
- for 루프
- while 루프
- 케이스 진술
컴퓨터는 지능적이지 않지만 데이터를 비교하고 구문 분석하는 데 능숙합니다. 스크립트에 일부 데이터 분석을 구축하면 스크립트가 훨씬 더 지능적으로 느껴질 수 있습니다. 예를 들어 기본 hello.sh 에코할 항목이 있는지 여부에 관계없이 스크립트가 실행됩니다.
$ bash hello.sh foo
foo
$ bash hello.sh
$
입력이 없을 때 도움말 메시지를 제공하면 더 사용자 친화적일 것입니다. 그것은 if/then 문이며, 기본적으로 Bash를 사용하고 있다면 Bash에 그러한 문이 존재한다는 사실을 모를 것입니다. 그러나 프로그래밍의 일부는 언어를 배우는 것이며 약간의 연구를 통해 if/then 문에 대해 배울 수 있습니다.
if [ "$1" = "" ]; then
echo "syntax: $0 WORD"
echo "If you provide more than one word, enclose them in quotes."
else
echo "$1"
fi
hello.sh의 새 버전 실행 결과:
$ bash hello.sh
syntax: hello.sh WORD
If you provide more than one word, enclose them in quotes.
$ bash hello.sh "hello world"
hello world
스크립트를 통해 작업하기
PDF 파일에서 이미지를 제거하거나 어수선한 다운로드 폴더를 관리하거나 Kubernetes 이미지를 생성 및 프로비저닝할 대상을 찾든 Bash 스크립팅을 배우는 것은 Bash를 사용한 다음 이러한 스크립트를 사용하는 방법을 배우는 문제입니다. 명령 목록에서 입력에 응답하는 것까지. 이것은 일반적으로 발견의 과정입니다. 텍스트 명령으로 수행할 수 있다고 상상하지 못했던 작업을 수행하는 새로운 Linux 명령을 찾을 수 밖에 없고, 스크립트를 원하는 모든 다양한 방식에 적용할 수 있도록 하는 Bash의 새로운 기능을 찾을 수 있습니다. 실행합니다.
이러한 트릭을 배우는 한 가지 방법은 다른 사람의 스크립트를 읽는 것입니다. 사람들이 시스템에서 기계적인 명령을 자동화하는 방법을 느껴보십시오. 당신에게 친숙해 보이는 것을 보고 익숙하지 않은 것에 대해 더 많은 정보를 찾으십시오.
또 다른 방법은 Bash eBook을 사용한 프로그래밍 소개를 다운로드하는 것입니다. Bash와 관련된 프로그래밍 개념을 소개하고 학습한 구성을 사용하여 고유한 명령 빌드를 시작할 수 있습니다. 물론 Creative Commons 라이선스에 따라 무료로 다운로드하고 라이선스를 받을 수 있습니다. 지금 사본을 받으십시오.