초보자를위한 셸 스크립팅 가이드 : 기본 사항

"쉘 스크립팅"이라는 용어는 Linux 포럼에서 자주 언급되지만 많은 사용자가 익숙하지 않습니다. 이 쉽고 강력한 프로그래밍 방법을 배우면 시간을 절약하고 명령 줄을 더 잘 배우고 지루한 파일 관리 작업을 제거 할 수 있습니다.

쉘 스크립팅이란?

Linux 사용자라는 것은 명령 줄을 사용한다는 것을 의미합니다. 좋든 싫든, 가리키고 클릭하는 것보다이 인터페이스를 통해 훨씬 더 쉽게 수행 할 수있는 작업이 있습니다. 명령 줄을 더 많이 사용하고 배울수록 그 잠재력을 더 많이 볼 수 있습니다. 음, 명령 줄 자체는 프로그램 인 쉘입니다. 오늘날 대부분의 Linux 배포판은 Bash를 사용하며 이것이 실제로 명령을 입력하는 것입니다.

이제 Linux를 사용하기 전에 Windows를 사용했던 사람들 중 일부는 배치 파일을 기억할 것입니다. 이 파일은 실행할 명령으로 채울 수있는 작은 텍스트 파일이며 Windows에서 차례로 실행합니다. 시스템 폴더를 열 수 없거나 바로 가기를 만들 수 없을 때 고등학교 컴퓨터 실에서 게임을 실행하는 것과 같은 작업을 수행하는 영리하고 깔끔한 방법이었습니다. Windows의 배치 파일은 유용하지만 쉘 스크립트의 저렴한 모방입니다.

쉘 스크립트를 사용하면 명령을 체인으로 프로그래밍하고 시스템이 배치 파일처럼 스크립트 된 이벤트로 명령을 실행하도록 할 수 있습니다. 또한 명령 대체와 같은 훨씬 더 유용한 기능을 허용합니다. date와 같은 명령을 호출하고 파일 이름 지정 체계의 일부로 출력을 사용할 수 있습니다. 백업을 자동화 할 수 있으며 복사 된 각 파일은 이름 끝에 현재 날짜를 추가 할 수 있습니다. 스크립트는 단순한 명령 호출도 아닙니다. 그들은 그 자체로 프로그램입니다. 스크립팅을 사용하면 'for'루프, if / then / else 문 등과 같은 프로그래밍 함수를 운영 체제의 인터페이스 내에서 직접 사용할 수 있습니다. 또한 이미 알고있는 명령 줄을 사용하고 있기 때문에 다른 언어를 배울 필요가 없습니다.

그것이 정말로 스크립팅의 힘이라고 생각합니다. 대부분의 주요 프로그래밍 언어의 필수 요소를 배우면서 이미 알고있는 명령으로 프로그래밍 할 수 있습니다. 반복적이고 지루한 작업이 필요하십니까? 스크립트 작성! 정말 복잡한 명령에 대한 바로 가기가 필요하십니까? 스크립트 작성! 정말 사용하기 쉬운 명령 줄 인터페이스를 만들고 싶습니까? 스크립트 작성!

시작하기 전에

스크립팅 시리즈를 시작하기 전에 몇 가지 기본 정보를 살펴 보겠습니다. 우리는 대부분의 Linux 배포판이 기본적으로 사용하는 bash 셸을 사용할 것입니다. Bash는 Mac OS 사용자와 Windows의 Cygwin도 사용할 수 있습니다. 매우 보편적이므로 플랫폼에 관계없이 스크립트를 작성할 수 있어야합니다. 또한 참조 된 모든 명령이 존재하는 한 스크립트는 약간의 조정없이 여러 플랫폼에서 작동 할 수 있습니다.

스크립팅은 "관리자"또는 "수퍼 유저"권한을 쉽게 사용할 수 있으므로 스크립트를 작동하기 전에 테스트하는 것이 가장 좋습니다. 또한 스크립트를 실행하려는 파일의 백업이 있는지 확인하는 것과 같은 상식을 사용하십시오. rm 명령에 –i와 같은 올바른 옵션을 사용하여 상호 작용이 필요하도록하는 것도 정말 중요합니다. 이렇게하면 불쾌한 실수를 방지 할 수 있습니다. 따라서 다운로드 한 스크립트를 읽고 문제가 발생할 경우를 대비하여 가지고있는 데이터에주의하십시오.

핵심에서 스크립트는 일반 텍스트 파일입니다. 텍스트 편집기를 사용하여 작성할 수 있습니다. gedit, emacs, vim, nano…이 목록은 계속됩니다. 서식있는 텍스트 나 Word 문서가 아닌 일반 텍스트로 저장하십시오. nano가 제공하는 사용 편의성이 마음에 들어서 사용할 것입니다.

스크립트 권한 및 이름

스크립트는 프로그램처럼 실행되며이를 위해서는 적절한 권한이 있어야합니다. 다음 명령을 실행하여 스크립트를 실행 가능하게 만들 수 있습니다.

chmod + x ~ / somecrazyfolder / 스크립트

이렇게하면 누구나 특정 스크립트를 실행할 수 있습니다. 사용자에게만 사용을 제한하려면 대신 다음을 사용할 수 있습니다.

chmod u + x ~ / somecrazyfolder / 스크립트

이 스크립트를 실행하려면 적절한 디렉토리로 이동 한 다음 다음과 같은 스크립트를 실행해야합니다.

cd ~ / somecrazyfolder

./script1

보다 편리한 작업을 위해 홈 디렉토리의 "bin"폴더에 스크립트를 배치 할 수 있습니다.

~ / 빈

많은 최신 배포판에서이 폴더는 더 이상 기본적으로 생성되지 않지만 생성 할 수 있습니다. 일반적으로 다른 사용자가 아닌 사용자의 실행 파일이 저장되는 위치입니다. 여기에 스크립트를 배치하면 './'접두사를 사용하지 않고 다른 명령과 마찬가지로 이름을 입력하여 실행할 수 있습니다.

하지만 스크립트 이름을 지정하기 전에 다음 명령을 실행하여 해당 이름을 사용하는 프로그램이 설치되어 있는지 확인해야합니다.

어느 [명령]

많은 사람들이 초기 스크립트의 이름을 "test"로 지정하고 명령 줄에서 실행하려고하면 아무 일도 일어나지 않습니다. 인수 없이는 아무 작업도 수행하지 않는 test 명령과 충돌하기 때문입니다. 항상 스크립트 이름이 명령과 충돌하지 않는지 확인하십시오. 그렇지 않으면 의도하지 않은 작업을 수행 할 수 있습니다.

스크립팅 지침

앞서 언급했듯이 모든 스크립트 파일은 기본적으로 일반 텍스트입니다. 그렇다고해서 원하는대로 쓸 수 있다는 의미는 아닙니다. 텍스트 파일을 실행하려고하면, 쉘은 스크립트인지 아닌지, 모든 것을 올바르게 처리하는 방법에 대한 단서를 찾기 위해 파일을 구문 분석합니다. 이 때문에 알아야 할 몇 가지 지침이 있습니다.

  1. 모든 스크립트는 "#! / bin / bash"와 함께 있어야합니다.
  2. 모든 새 줄은 새 명령입니다.
  3. 주석 줄은 #로 시작합니다.
  4. 명령은 ()로 둘러싸여 있습니다.

해시 뱅 해킹

쉘이 텍스트 파일을 구문 분석 할 때 파일을 스크립트로 식별하는 가장 직접적인 방법은 첫 번째 행을 만드는 것입니다.

#! / bin / bash

다른 쉘을 사용하는 경우 여기에서 해당 경로를 대체하십시오. 주석 줄은 해시 (#)로 시작하지만 그 뒤에 쾅 (!)과 셸 경로를 추가하면이 주석 규칙을 우회하고 스크립트가이 줄이 가리키는 셸로 실행되도록 강제하는 일종의 해킹입니다.

새 줄 = 새 명령

모든 새 줄은 새 명령 또는 더 큰 시스템의 구성 요소로 간주되어야합니다. 예를 들어, If / then / else 문은 여러 줄을 차지하지만 해당 시스템의 각 구성 요소는 새 줄에 있습니다. 명령이 다음 줄로 넘치게하지 마십시오. 이렇게하면 이전 명령이 잘리고 다음 줄에서 오류가 발생할 수 있습니다. 텍스트 편집기가 그렇게하는 경우 안전을 위해 텍스트 줄 바꿈을 해제해야합니다. Alt + L을 누르면 나노 비트로 텍스트 줄 바꿈을 끌 수 있습니다.

자주 #로 댓글 달기

#으로 시작하면 해당 라인이 무시됩니다. 그러면 이전 명령의 출력이 무엇인지 또는 다음 명령이 수행 할 작업을 기억할 수있는 주석 줄로 바뀝니다. 다시 말하지만, 텍스트 줄 바꿈을 끄거나 주석을 모두 해시로 시작하는 여러 줄로 나누십시오. 많은 주석을 사용하는 것은 여러분과 다른 사람들이 여러분의 스크립트를 더 쉽게 수정할 수 있도록 해주기 때문에 유지하는 것이 좋습니다. 유일한 예외는 앞서 언급 한 Hash-Bang 해킹이므로 #s 뒤에! s를 사용하지 마십시오. ;-)

명령은 괄호로 묶여 있습니다.

예전에는 단일 눈금 표시 (`, ~ 키 공유)로 명령 대체가 수행되었습니다. 우리는 아직 이것에 대해 다루지 않을 것이지만, 대부분의 사람들이 기본 사항을 배우고 나서 탐색을 시작하므로 대신 괄호를 사용해야한다는 것을 언급하는 것이 좋습니다. 이는 주로 중첩 할 때 (다른 명령 안에 명령을 넣을 때) 괄호가 더 잘 작동하기 때문입니다.

첫 번째 스크립트

파일을 복사하고 파일 이름 끝에 날짜를 추가 할 수있는 간단한 스크립트로 시작하겠습니다. "datecp"라고합시다. 먼저 그 이름이 무언가와 충돌하는지 확인합시다.

which 명령의 출력이 없음을 알 수 있으므로 모두이 이름을 사용하도록 설정되었습니다.

~ / bin 폴더에 빈 파일을 만들어 보겠습니다.

~ / bin / datecp를 터치합니다.

그리고 잊어 버리기 전에 지금 권한을 변경해 보겠습니다.

이제 스크립트 작성을 시작하겠습니다. 선택한 텍스트 편집기에서 해당 파일을 엽니 다. 말씀 드렸듯이 저는 나노의 단순함을 좋아합니다.

나노 ~ / bin / datecp

그리고 먼저 전제 조건 첫 번째 줄과이 스크립트가 수행하는 작업에 대한 설명을 입력하겠습니다.

다음으로 변수를 선언 해 봅시다. 대수학을 본 적이 있다면 그것이 무엇인지 알 것입니다. 변수를 사용하면 정보를 저장하고 관련 작업을 수행 할 수 있습니다. 변수는 다른 곳에서 참조 될 때 "확장"될 수 있습니다. 즉, 이름을 표시하는 대신 저장된 내용을 표시합니다. 나중에 동일한 변수에 다른 정보를 저장하도록 지시 할 수 있으며 그 이후에 발생하는 모든 명령은 새 정보를 사용합니다. 정말 멋진 자리 표시 자입니다.

변수에 무엇을 넣을까요? 자, 날짜와 시간을 저장합시다! 이를 위해 date 명령을 호출합니다.

date 명령의 출력을 빌드하는 방법은 아래 스크린 샷을 참조하십시오.

%로 시작하는 다른 변수를 추가하여 명령 출력을 원하는대로 변경할 수 있음을 알 수 있습니다. 자세한 내용은 date 명령에 대한 매뉴얼 페이지를 참조하십시오.

date 명령의 마지막 반복 인 "date + % m_ % d_ % y- % H. % M. % S"를 사용하고 스크립트에서 사용하겠습니다.

이 스크립트를 지금 저장하면 실행할 수 있으며 예상 한대로 date 명령의 출력이 제공됩니다.

그러나 다른 것을 해보자. 이 명령에 date_formatted와 같은 변수 이름을 지정하겠습니다. 이에 대한 적절한 구문은 다음과 같습니다.

변수 = $ (명령 – 옵션 인수)

그리고 우리를 위해 우리는 다음과 같이 만들 것입니다.

date_formatted = $ (날짜 + % m_ % d_ % y- % H. % M. % S)

이것이 우리가 명령 대체라고 부르는 것입니다. 우리는 본질적으로 bash에게“date_formatted”변수가 나타날 때마다 괄호 안의 명령을 실행하도록 지시합니다. 그런 다음 명령이 제공하는 출력이 변수 이름 "date_formatted"대신 표시되어야합니다.

다음은 예제 스크립트와 그 출력입니다.

출력에는 두 개의 공백이 있습니다. echo 명령의 따옴표 안의 공백과 변수 앞의 공백이 모두 표시됩니다. 표시하지 않으려면 공백을 사용하지 마십시오. 또한 "echo"줄이 추가되지 않으면 스크립트는 출력을 전혀 제공하지 않습니다.

스크립트로 돌아 갑시다. 다음으로 명령의 복사 부분을 추가하겠습니다.

cp –iv $ 1 $ 2. $ date_formatted

그러면 –i 및 –v 옵션과 함께 복사 명령이 호출됩니다. 전자는 파일을 덮어 쓰기 전에 확인을 요청하고 후자는 명령 줄에 중단 된 내용을 표시합니다.

다음으로 "$ 1"옵션을 추가했음을 알 수 있습니다. 스크립팅 할 때 달러 기호 ($) 뒤에 숫자가 표시되면 스크립트가 호출되었을 때 번호가 매겨진 스크립트 인수를 나타냅니다. 예를 들어, 다음 명령에서 :

cp –iv Trogdor2.mp3 ringtone.mp3

첫 번째 인수는 "Trogdor2.mp3"이고 두 번째 인수는 "ringtone.mp3"입니다.

스크립트를 다시 살펴보면 두 가지 인수를 참조하고 있음을 알 수 있습니다.

즉, 스크립트를 실행할 때 스크립트가 올바르게 실행 되려면 두 개의 인수를 제공해야합니다. 첫 번째 인수 $ 1은 복사 될 파일이며 "cp –iv"명령의 첫 번째 인수로 대체됩니다.

두 번째 인수 $ 2는 동일한 명령에 대한 출력 파일로 작동합니다. 그러나 당신은 또한 그것이 다르다는 것을 알 수 있습니다. 마침표를 추가했으며 위에서 "date_formatted"변수를 참조했습니다. 이것이 무엇을하는지 궁금하십니까?

스크립트가 실행되면 다음과 같은 일이 발생합니다.

출력 파일이 $ 2에 대해 입력 한 내용과 마침표, date 명령의 출력으로 나열되는 것을 볼 수 있습니다! 말이 되죠?

이제 datecp 명령을 실행하면이 스크립트를 실행하여 파일을 새 위치에 복사하고 파일 이름 끝에 날짜와 시간을 자동으로 추가 할 수 있습니다. 자료 보관에 유용합니다!

쉘 스크립팅은 OS가 작동하도록 만드는 핵심입니다. 새로운 프로그래밍 언어를 배울 필요도 없습니다. 집에서 몇 가지 기본 명령으로 스크립팅을 시도하고 이것을 사용할 수있는 방법을 생각해보십시오.

당신은 스크립트를합니까? 초보자를위한 조언이 있습니까? 의견에 귀하의 생각을 공유하십시오! 이 시리즈에는 더 많은 것이 있습니다!