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

Bash 및 Linux Shell의 HEREDOC(Here Documents) – 자습서

이 문서에서는 Heredoc(여기 문서 ) Bash/Shell 스크립트에서 여러 줄 텍스트로 작업합니다.

Heredocs는 여러 줄 입력을 허용하는 데 가장 유용합니다. 사용자는 한 줄의 텍스트를 입력하고 Enter 키를 누르고 다음 줄을 입력하는 등의 작업을 수행할 수 있습니다. 스크립트에서 여러 줄 텍스트를 정의하는 데 사용할 수도 있습니다.

또한 여러 명령을 대화형 프로그램으로 보낼 수도 있습니다. 이는 나중에 예제에서 보여드리겠습니다.

이 기사의 예제는 Bash 및 Zsh 셸에서 모두 작동합니다.

표준 입력, 배관 및 리디렉션

Heredoc은 일반적으로 처리, 서식 지정 또는 표시를 위해 여러 줄 텍스트를 다른 명령으로 보내기 위해 표준 입력/출력 및 리디렉션/파이핑과 함께 사용됩니다. 이 주제는 개념을 설명하는 기사가 필요하므로 다음과 같습니다.

예를 들어 Linux/Bash에서 stdin, stdout, stderr 리디렉션

아래의 예에서는 위 기사에서 다룬 개념과 방법을 여러 지점에서 사용할 것입니다.

Bash/Zsh Heredoc 구문

Heredoc을 시작하려면 , 단순히 << 명령. 이것은 위에서 설명한 입력/출력 리디렉션의 한 형태입니다.

Heredoc 사용 구문 다음과 같습니다:

COMMAND <<LIMITSTRING
text line 1
text line 2
...
LIMITSTRING

참고:

  • 명령 모든 Linux 명령 또는 스크립트가 될 수 있습니다. heredoc에 포함된 텍스트의 내용은 리디렉션을 사용하여 전송됩니다.
  • << Heredoc 문의 시작 부분을 정의합니다.
    • 여러 줄로 된 텍스트를 들여쓰려면 <<-를 사용하세요. (추가된 대시 참고) 대신 – 각 줄에서 선행 탭을 제거합니다.
  • LIMITSTRING Heredoc
      에 대한 텍스트 입력을 끝내기 위해 입력해야 하는 문자열입니다.
    • Heredocs는 여러 줄로 되어 있으므로 사용자가 ENTER 키를 눌러 다음 줄로 이동하므로 Enter 키를 눌러 새 텍스트 입력을 중지할 수 없습니다.
    • LIMITSTRING , 텍스트 입력과 완료를 Heredoc에 알립니다.
    • 무엇이든 가능합니다 – 텍스트에 표시할 필요가 없는 일련의 문자를 사용하여 너무 일찍 끝나지 않도록 하십시오.
    • 일반적인 방법은 텍스트 EOF를 사용하는 것입니다. (E의 약어 nd OF ile) LIMITSTRING – 이 텍스트가 Heredoc에 나타나지 않는 한.
  • 원하는 만큼 텍스트를 줄 수 있습니다.

Heredoc 예제

여러 줄 텍스트 입력 수락

이 예에서는 여러 줄의 텍스트를 허용하여 cat 표시 명령:

cat <<EOF
This is line 1
This is line 2
EOF

위의 예는 터미널 프로그램에 입력해야 합니다.

변수 사용

Heredoc에서 쉘 변수를 사용할 수 있습니다.

cat <<EOF
This is line 1
This is line 2
Your current directory is $PWD
EOF

위의 $PWD 변수는 Heredoc의 줄 중 하나에 표시됩니다. 이 변수는 현재 작업 디렉터리의 값을 보유합니다.

Heredoc의 출력 리디렉션

표준 리디렉션(이것이 무엇인지 모르는 경우 기사 앞부분 참조)을 사용하여 Heredoc의 내용을 COMMAND로 보낸 후 다른 프로그램이나 파일로 보낼 수 있습니다.

cat <<EOF > output.txt
This is line 1
This is line 2
Your current directory is $PWD
EOF

위, 고양이 Heredoc의 내용과 cat의 출력을 읽습니다. 리디렉션되어 output.txt 파일에 기록됩니다. > 사용 명령.

스크립트에서 여러 줄 텍스트 정의

스크립트에서 Heredoc을 사용할 수 있습니다. 셸 스크립트는 셸에 입력할 줄 단위 명령의 목록일 뿐이므로 동일한 방식으로 작동합니다.

스크립트 코드를 들여쓸 수 있어서 좋습니다. 이러한 탭이 텍스트에 표시되지 않도록 하려면 (대시) Heredoc 선언에 추가하여 각 줄의 시작 부분에서 공백을 제거합니다.

#!/bin/bash

if $trueOrFalse; then
    cat <<-EOF > output.txt
    This is line 1
    This is line 2
    Your current directory is $PWD
    EOF
fi

#!/bin/bash
입니다.

변수에 Heredoc 할당

Heredoc의 여러 줄 텍스트를 cat으로 읽어 스크립트 변수에 할당할 수 있습니다. 다음과 같이 변수에 출력을 할당합니다.

mytext=$(cat <<-EOF 
    This is line 1
    This is line 2
    Your current directory is $PWD
    EOF
)

echo $mytext

대화형 프로그램에 여러 명령 보내기

Heredocs는 여러 줄의 텍스트를 대화형 프로그램에 보낼 수도 있습니다. 일부 프로그램은 일단 실행되면 사용자가 자신의 명령을 입력할 것으로 예상합니다. 처리를 위해 텍스트를 수락하거나 명령을 실행하기 위해 자체 쉘을 제공할 수 있습니다.

한 가지 예는 MySQL입니다. MySQL이 시작되고 서버에 연결되면 고유한 명령을 입력한 다음 Enter 키를 입력하여 데이터를 쿼리할 수 있습니다. Heredoc을 사용하면 다음 명령을 미리 작성하여 사용자 상호 작용 없이 MySQL로 보낼 수 있습니다.

mysql -uUSERNAME -pPASSWORD DATABASE <<EOF
SHOW TABLES;
SELECT * FROM posts;
EOF

위의 MySQL 명령은 USERNAME 및 PASSWORD로 지정된 DATABASE에 연결하는 데 사용됩니다.

연결이 준비되면 두 개의 순차적 명령이 실행됩니다. 하나는 SHOW TABLES입니다. 그리고 하나는 SELECT 게시물의 모든 기록 표.