Bash 스크립트에 대한 파일 매개변수 가져오기

Bash 스크립트에 대한 파일 매개변수 가져오기

Bash를 사용하여 텍스트 조작 스크립트를 실행하려고 합니다. 스크립트의 경우 다음 구문을 사용하여 입력용 텍스트 파일을 가져오고 싶습니다.

./my_Script.sh < filename

이런 식으로 파일에서 입력을 얻을 수 있습니까? 넣어보려고

'>' test.txt

스크립트의 첫 번째 줄에서 데이터를 읽으려고 시도했지만 수행한 작업은 빈 텍스트 파일을 만드는 것뿐입니다.

답변1

달성하려는 목표에 따라 다릅니다.

네가 원한다면각 행 처리입력 파일에서 다음을 수행할 수 있습니다.

#!/bin/bash
while read -r line; do
  echo "Next line: $line"
  # or something more useful.... :-)
done

그런 다음 설명하는 대로 이 스크립트를 호출할 수 있습니다.

./script.sh < input_file.txt

네가 원한다면파일 이름을 다른 도구에 전달다음을 수행할 수 있습니다.

#!/bin/bash

other_tool "$1"

다음과 같이 스크립트를 호출하십시오.

./script.sh input_file.txt

답변2

이 입력 리디렉션을 하드코딩하려면 다음 exec명령을 사용하십시오.

exec < test.txt

그럼 넌 할 수 있어

while IFS= read -r line; do
    echo "got: $line"
done

답변3

그리고

./script.sh <filename

스크립트의 표준 입력 전체를 파일에 추가합니다 filename. 이것은 의미한다아무것스크립트의 표준 입력에서 읽는 것은 filename파일 끝에 도달할 때까지 파일에서 읽혀집니다.

예를 들어, 위의 방식으로 호출하는 스크립트(모든 문자를 대문자로 변경)는 다음과 같이 작성할 수 있습니다.

#!/bin/sh

tr 'a-z' 'A-Z'

참고 filename하시거나<filename 논쟁이 아니다스크립트의 명령이지만 파일에서 나오도록 스크립트의 표준 입력을 설정하는 쉘에 발행된 명령입니다.

반면에 다음을 사용하여 스크립트를 실행하면

./scripts.sh filename

그러면 파일 이름을 $1스크립트에서와 같이 사용할 수 있으며 파일을 읽을 때 인용해야 합니다.

#!/bin/sh

tr 'a-z' 'A-Z' <"$1"

또는,

#!/bin/sh

filename=$1

tr 'a-z' 'A-Z' <"$filename"

이렇게 하면 동일한 파일을 여러 번 구문 분석할 수 있는 반면, 스크립트의 표준 입력을 통해 내용을 읽으면 파일을 한 번만 읽을 수 있습니다(예를 들어 스크립트의 임시 파일에 저장한 다음 cat >tmpfilename구문 분석하는 데 사용하지 않는 한). .

명령줄에 스크립트 파일 이름을 지정하면 루프에서 원하는 수의 파일을 처리할 수도 있습니다.

#!/bin/sh

for pathname do
    # code that processes "$pathname"
done

관련 정보