Bash로 스크립팅할 때 파일에서 데이터를 읽거나 써야 하는 경우가 있습니다. 파일에 구성 옵션이 포함되어 있는 경우도 있고 사용자가 애플리케이션으로 생성하는 데이터인 경우도 있습니다. 모든 언어는 이 작업을 약간 다르게 처리하며 이 기사에서는 Bash 및 기타 POSIX 셸을 사용하여 데이터 파일을 처리하는 방법을 보여줍니다.
배시 설치
Linux를 사용 중이라면 이미 Bash가 있을 것입니다. 그렇지 않은 경우 소프트웨어 저장소에서 찾을 수 있습니다.
macOS에서는 실행 중인 macOS 버전에 따라 기본 터미널인 Bash 또는 Zsh를 사용할 수 있습니다.
Windows에서는 Microsoft에서 공식적으로 지원하는 Linux용 Windows 하위 시스템(WSL)을 포함하여 여러 가지 방법으로 Bash를 경험할 수 있습니다.
Bash를 설치했으면 즐겨 사용하는 텍스트 편집기를 열고 코딩할 준비를 하세요.
Bash로 파일 읽기
Bash는 쉘일 뿐만 아니라 스크립팅 언어입니다. Bash에서 데이터를 읽는 방법에는 여러 가지가 있습니다. 일종의 데이터 스트림을 만들고 출력을 구문 분석하거나 데이터를 메모리에 로드할 수 있습니다. 둘 다 정보를 수집하는 유효한 방법이지만 각각은 매우 구체적인 사용 사례를 가지고 있습니다.
Bash에서 파일 소스
Bash에서 파일을 "소싱"하면 Bash가 설정된 데이터 모델에 맞출 수 있는 유효한 데이터가 포함되어 있을 것으로 예상하여 Bash가 파일의 내용을 읽도록 합니다. 이전 파일에서 데이터를 소싱하지 않지만 이 방법을 사용하여 구성 파일 및 기능을 읽을 수 있습니다.
예를 들어 example.sh
라는 파일을 만듭니다. 다음을 입력하세요.
#!/bin/sh
greet opensource.com
echo "The meaning of life is $var"
코드를 실행하여 실패하는지 확인하십시오.
$ bash ./example.sh
./example.sh: line 3: greet: command not found
The meaning of life is
Bash에는 greet
라는 명령이 없습니다. , 그래서 해당 라인을 실행할 수 없으며 var
라는 변수에 대한 레코드가 없습니다. , 그래서 알려진 삶의 의미가 없습니다. 이 문제를 해결하려면 include.sh
라는 파일을 만드세요. :
greet() {
echo "Hello ${1}"
}
var=42
example.sh
수정 source
를 포함하는 스크립트 명령:
#!/bin/sh
source include.sh
greet opensource.com
echo "The meaning of life is $var"
스크립트를 실행하여 작동하는지 확인하십시오:
$ bash ./example.sh
Hello opensource.com
The meaning of life is 42
greet
명령은 include.sh
에 정의되어 있으므로 셸 환경으로 가져옵니다. 파일이며 인수(opensource.com
이 예에서는). 변수 var
설정 및 가져오기도 합니다.
Bash에서 파일 구문 분석
데이터를 Bash "로" 가져오는 다른 방법은 데이터 스트림으로 구문 분석하는 것입니다. 이를 수행하는 방법에는 여러 가지가 있습니다. grep
를 사용할 수 있습니다. 또는 cat
또는 데이터를 가져와 stdout에 파이프하는 모든 명령. 또는 Bash에 내장된 기능인 리디렉션을 사용할 수 있습니다. 리디렉션 자체는 그다지 유용하지 않으므로 이 예에서는 내장된 echo
도 사용합니다. 리디렉션 결과를 인쇄하는 명령:
#!/bin/sh
echo $( < include.sh )
이것을 stream.sh
로 저장하십시오. 실행하여 결과를 확인하십시오.
$ bash ./stream.sh
greet() { echo "Hello ${1}" } var=42
$
include.sh
의 각 줄에 대해 파일에서 Bash는 해당 행을 터미널에 인쇄(또는 반향)합니다. 먼저 적절한 파서에 파이프하는 것은 Bash로 데이터를 읽는 일반적인 방법입니다. 예를 들어 include.sh
등호(=
)로 구분된 키 및 값 쌍이 있는 구성 파일입니다. ) 징후. awk
로 값을 얻을 수 있습니다. 또는 cut
:
#!/bin/sh
myVar=`grep var include.sh | cut -d'=' -f2`
echo $myVar
스크립트를 실행해 보십시오:
$ bash ./stream.sh
42
Bash로 파일에 데이터 쓰기
사용자가 애플리케이션으로 생성한 데이터를 저장하든, 아니면 사용자가 애플리케이션에서 수행한 작업에 대한 메타데이터(예:게임 저장 또는 최근 재생한 노래)를 저장하든 나중에 사용하기 위해 데이터를 저장해야 하는 충분한 이유가 있습니다. Bash에서는 일반적인 셸 리디렉션을 사용하여 데이터를 파일에 저장할 수 있습니다.
예를 들어 출력이 포함된 새 파일을 만들려면 단일 리디렉션 토큰을 사용하세요.
#!/bin/sh
TZ=UTC
date > date.txt
스크립트를 몇 번 실행하십시오.
$ bash ./date.sh
$ cat date.txt
Tue Feb 23 22:25:06 UTC 2021
$ bash ./date.sh
$ cat date.txt
Tue Feb 23 22:25:12 UTC 2021
데이터를 추가하려면 이중 리디렉션 토큰을 사용하세요.
#!/bin/sh
TZ=UTC
date >> date.txt
스크립트를 몇 번 실행하십시오.
$ bash ./date.sh
$ bash ./date.sh
$ bash ./date.sh
$ cat date.txt
Tue Feb 23 22:25:12 UTC 2021
Tue Feb 23 22:25:17 UTC 2021
Tue Feb 23 22:25:19 UTC 2021
Tue Feb 23 22:25:22 UTC 2021
쉬운 프로그래밍을 위한 Bash
Bash는 몇 가지 기본 개념만 있으면 복잡한 프로그램을 구축할 수 있기 때문에 배우기 쉽다는 점에서 탁월합니다. 전체 문서는 GNU.org에서 우수한 Bash 문서를 참조하십시오.