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

쉘 스크립팅에서 Heredoc을 사용하는 방법

Here 문서(Heredoc )은 특수 코드 블록으로 처리되는 입력 또는 파일 스트림 리터럴입니다. 이 코드 블록은 처리를 위해 명령에 전달됩니다. 이단 UNIX에서 시작됨 쉘이며 sh, tcsh, ksh, bash, zsh, csh와 같은 인기 있는 Linux 쉘에서 찾을 수 있습니다. 특히 Perl, Ruby, PHP와 같은 다른 프로그래밍 언어도 heredoc을 지원합니다.

Herdoc의 구조

이단 꺾쇠 괄호 2개 사용 (<<) 뒤에 구분자 토큰이 옵니다. . 코드 블록을 종료하는 데 동일한 구분 기호 토큰이 사용됩니다. 구분 기호 안에 있는 모든 항목은 코드 블록으로 간주됩니다.

아래의 예를 보십시오. 코드 블록을 cat 명령으로 리디렉션하고 있습니다. 여기서 구분 기호는 "BLOCK으로 설정됩니다. ' 및 동일한 'BLOCK에 의해 종료됨 ".

cat << BLOCK
	Hello world
	Today date is $(date +%F)
	My home directory = ${HOME}
BLOCK

참고 :블록을 시작하고 종료하려면 동일한 구분자 토큰을 사용해야 합니다.

여러 줄 주석 작성

지금 bash로 코딩하고 있다면 bash가 기본적으로 C와 같은 여러 줄 주석을 지원하지 않는다는 것을 알 수 있습니다. 또는 자바 . HereDoc을 사용할 수 있습니다. 이를 극복하기 위해.

이것은 여러 줄 주석을 지원하는 bash의 내장 기능이 아니라 해킹입니다. heredoc을 리디렉션하지 않는 경우 어떤 명령이든 인터프리터는 단순히 코드 블록을 읽고 아무 ​​것도 실행하지 않습니다.

<< COMMENT
	This is comment line 1
	This is comment line 2
	This is comment line 3
COMMENT
쉘 스크립팅에서 Heredoc을 사용하는 방법

공백 처리

기본적으로 heredoc 공백 문자(탭, 공백)를 억제하지 않습니다. dash (-)를 추가하여 이 동작을 재정의할 수 있습니다. (<<) 뒤 뒤에 구분 기호가 옵니다. 이렇게 하면 모든 탭 공백이 표시되지 않지만 공백은 표시되지 않습니다.

cat <<- BLOCK
This line has no whitespace.
  This line has 2 white spaces at the beginning.
    This line has a single tab.
        This line has 2 tabs.
            This line has 3 tabs.
BLOCK
쉘 스크립팅에서 Heredoc을 사용하는 방법

변수 및 명령 대체

Heredoc은 변수 대체를 허용합니다. 변수는 사용자 정의 변수 또는 환경 변수일 수 있습니다.

TODAY=$(date +%F)
	
cat << BLOCK1
# User defined variables
Today date is = ${TODAY}
#Environ Variables
I am running as = ${USER}
My home dir is = ${HOME}
I am using ${SHELL} as my shell
BLOCK1

마찬가지로 heredoc 내에서 모든 명령을 실행할 수 있습니다. 코드 블록.

cat << BLOCK2
$(uname -a) 
BLOCK2
쉘 스크립팅에서 Heredoc을 사용하는 방법 쉘 스크립팅에서 Heredoc을 사용하는 방법

특수 문자 이스케이프

특수 문자를 이스케이프할 수 있는 몇 가지 방법이 있습니다. 캐릭터 레벨이나 문서 레벨에서 할 수 있습니다.

개별 특수 문자를 이스케이프하려면 백슬래시(\)를 사용하세요. .

cat << BLOCK4
$(uname -a)
BLOCK4

cat << BLOCK5
Today date is = ${TODAY}
BLOCK5

블록 안의 모든 특수 문자를 이스케이프하려면 구분자를 작은따옴표, 큰따옴표로 묶거나 접두어 구분자를 백슬래시로 묶습니다.

cat << 'BLOCK1'
I am running as = ${USER}
BLOCK1

cat << "BLOCK2"
I am running as = ${USER}
BLOCK2

cat << \BLOCK3
I am running as = ${USER}
BLOCK3
쉘 스크립팅에서 Heredoc을 사용하는 방법

이제 heredoc의 구조를 알았으므로 작동 원리, 몇 가지 예를 살펴보겠습니다. 내가 heredoc을 사용하는 두 가지 공통 영역 SSH를 통해 명령 블록을 실행하고 heredoc을 통해 SQL 쿼리를 전달합니다. .

아래 예에서는 SSH를 통해 원격 서버에서 코드 블록을 실행하려고 합니다.

쉘 스크립팅에서 Heredoc을 사용하는 방법

아래 예에서는 select psql에 대한 문 데이터베이스에 연결하고 쿼리를 실행합니다. 이것은 psql에서 쿼리를 실행하는 다른 방법입니다. -f를 사용하는 대신 bash 스크립트 내부 .sql 실행 플래그 파일.

#!/usr/bin/env bash

UNAME=postgres
DBNAME=testing

psql --username=${UNAME} --password --dbname=${DBNAME} << BLOCK
SELECT * FROM COUNTRIES
WHERE region_id = 4;
BLOCK
쉘 스크립팅에서 Heredoc을 사용하는 방법

그것이 이 글의 내용입니다. heredoc으로 할 수 있는 일이 훨씬 더 많습니다. 우리가 예에서 보여준 것과 비교합니다. heredoc에 유용한 해킹이 있다면 독자들이 이점을 누릴 수 있도록 댓글 섹션에 게시하십시오.