Linux

쉘 스크립트 실행 - 새 프로세스에서 셸 스크립트 실행

빼이 2020. 10. 7. 13:40
반응형

거의 모든 프로그래밍 언어 자습서는 유명한 "Hello World"로 시작합니다.이 전통을 존중하기 위해 (또는 고정 관념에 속함) 첫 번째 Shell 스크립트는 "Hello World"도 출력합니다.


텍스트 편집기를 열고 새 텍스트 파일을 만들고 이름을 test.sh로 지정합니다.

확장자 sh는 쉘을 나타내며 확장자는 스크립트 실행에 영향을주지 않습니다. 이름의 의미를 아는 것이 php좋습니다. php로 쉘 스크립트를 작성하면 확장자가 좋습니다.


test.sh에 코드를 입력하십시오.

  1. #! / bin / bash
  2. echo "Hello World!" # 이것은 문장입니다

첫 번째 줄 #!은 합의 된 표시로, 스크립트를 실행해야하는 인터프리터, 즉 어떤 종류의 쉘이 사용되는지 시스템에 알려주고 후자 /bin/bash는 인터프리터의 특정 위치입니다.


2 행의 echo 명령은 텍스트를 표준 출력 파일로 출력하는 데 사용됩니다 (표준 출력, stdout, 일반적으로 디스플레이를 나타냄). .sh파일 에서 명령 을 사용 하는 것은 터미널에서 직접 명령을 입력하는 것과 동일한 효과를 갖습니다.


2 행의 #내용은 주석입니다. 쉘 스크립트 #의 모든 시작은 주석입니다 (물론 #!시작은 제외). 스크립트를 작성할 때 다른 사람들이 스크립트를 이해할 수 있도록 더 많은 주석을 작성하는 것이 매우 필요하며 나중에 유지 관리 할 때 자신의 스크립트를 이해하는 것도 편리합니다. 사실 스크립트를 작성하더라도, 또한 일정 시간이 지나면 잊기 쉽습니다.


다음은 약간 더 복잡한 쉘 스크립트입니다.

  1. #! / bin / bash
  2. # 저작권 (c) http://www.daum.net/shell/
  3. echo "당신의 이름은 무엇입니까?"
  4. PERSON 읽기
  5. echo "안녕하세요, $ PERSON"

다섯 번째 줄은 사용자가 입력 한 데이터를 터미널에서 읽어 PERSON 변수에 할당했음을 나타냅니다. 읽기 명령은 표준 입력 파일 (표준 입력, stdin, 일반적으로 키보드를 나타냄)에서 사용자가 입력 한 데이터를 읽는 데 사용됩니다.


6 행은 출력 변수 PERSON의 내용을 나타냅니다. $변수 이름 앞에 추가해야합니다 . 그렇지 않으면 변수 이름이 문자열의 일부로 처리됩니다.


★ 새 프로세스에서 셸 스크립트 실행

새 프로세스에서 쉘 스크립트를 실행하는 방법에는 여러 가지가 있습니다.


1) 프로그램으로 셸 스크립트 실행

셸 스크립트는 또한 아래와 같이 터미널에서 직접 호출 할 수있는 일종의 해석 실행 프로그램입니다 (셸 스크립트에 실행 권한을 추가하려면 chmod 명령을 사용해야 함).

[backhyung @ localhost ~] $ cd demo # test.sh가있는 디렉토리로 전환합니다.

[backhyung @ localhost demo] $ chmod + x ./test.sh # 스크립트에 실행 권한 추가

[backhyung @ localhost demo] $ ./test.sh # 스크립트 파일 실행

Hello World! #Run 결과


두 번째 줄에서는 chmod +xtest.sh에 실행 권한이 추가되었음을 의미합니다.


3 행에서는 ./현재 디렉토리를 나타내고 전체 명령은 현재 디렉토리에서 test.sh 스크립트를 실행하는 것을 의미합니다. 작성하지 않으면 ./Linux는 시스템 경로 (PATH 환경 변수에 의해 지정됨)에서 test.sh를 찾지 만 스크립트가 시스템 경로에 분명히 존재하지 않으므로 실행이 실패합니다.


이러한 방식으로 스크립트를 실행하려면 #!/bin/bash시스템이 올바른 인터프리터를 찾을 수 있도록 스크립트 파일의 첫 번째 줄을 올바르게 작성해야합니다.


2) Bash 인터프리터에 셸 스크립트를 매개 변수로 전달

또한 아래와 같이 Bash 인터프리터를 직접 실행하고 스크립트 파일의 이름을 매개 변수로 Bash에 전달할 수 있습니다.

[backhyung @ localhost ~] $ cd demo # test.sh가있는 디렉토리로 전환합니다.

[backhyung @ localhost demo] $ / bin / bash test.sh #Bash의 절대 경로 사용

Hello World! #Run 결과


이러한 방식으로 스크립트를 실행하려면 스크립트 파일의 첫 번째 줄에 인터프리터 정보를 지정할 필요가 없으며 작성하는 것도 쓸모가 없습니다.


더 간결한 방법은 bash 명령을 실행하는 것입니다. Bash는 외부 명령입니다. 쉘은 " 쉘 명령의 본질 "섹션에서 언급 한 / bin 디렉토리, 즉 / bin / bash에서 해당 응용 프로그램을 찾습니다 .

[backhyung @ localhost ~] $ cd demo

[backhyung @ localhost demo] $ bash test.sh

안녕하세요!


두 가지 작성 방법은 본질적으로 동일합니다. 첫 번째 작성 방법은 절대 경로를 제공하여 Bash 인터프리터를 직접 실행합니다. 두 번째 작성 방법은 bash 명령을 사용하여 Bash 인터프리터가있는 디렉토리를 찾은 다음 다시 실행합니다. 검색 과정 일뿐입니다.


새 프로세스가 시작되었는지 확인

Linux의 모든 프로세스에는 PID라는 고유 ID $$가 있으며 변수를 사용 하여 현재 프로세스의 PID를 가져올 수 있습니다 . $$이것은 Shell의 특수 변수입니다. 


먼저 다음 스크립트 파일을 작성하고 이름을 check.sh로 지정합니다.

  1. #! / bin / bash
  2. echo $$  # 출력 전류 프로세스 PID

그런 다음 위의 두 가지 방법을 사용하여 check.sh를 실행합니다.


[backhyung @ localhost demo] $ echo $$

2861 #PID 현재 프로세스의 

[backhyung @ localhost demo] $ chmod + x ./check.sh

[backhyung @ localhost demo] $ ./check.sh

4597 #PID 새 프로세스

[backhyung @ localhost demo] $ echo $$

2861 #PID 현재 프로세스의 

[backhyung @ localhost demo] $ / bin / bash check.sh

4584 #PID 새 프로세스

보시다시피 프로세스의 PID는 다릅니다. 물론 두 개의 프로세스가 있습니다.


반응형