파일에서 프로그램으로 입력 리디렉션

파일에서 프로그램으로 입력 리디렉션

파일에서 입력을 읽을 수 있는 프로그램을 작성하려고 하는데 막혔습니다. 내 프로그램은 다음과 같습니다

#!/bin/bash
num=$(($1 + $2))
echo $num

내 입력 테스트:

1
1

나는 사용했다

./prog < test1.in

하지만 오류 메시지가 표시됩니다./prog
: line 2: + : 구문 오류: 피연산자가 필요합니다(오류는 "+"로 표시됨).

뭐가 문제 야? 감사해요!

답변1

파일에서 입력을 읽는 프로그램을 작성하는 대신 다음 형식으로 입력을 받는 프로그램을 작성합니다.위치 매개변수(일명 명령줄 매개변수) 리디렉션 연산자는 <파일 데이터를 프로그램의표준 입력 스트림(일명 stdin) - 프로그램이 이를 무시합니다.

가장 간단하게 표준 입력에서 값당 한 줄을 읽으려면 프로그램을 다음과 같이 변경할 수 있습니다.

#!/bin/bash
read a
read b
num=$((a+b))
echo $num

이제 테스트 파일에서 리디렉션하면 stdin결과는 다음과 같아야 합니다.

$ ./newprog < test1.in
2

또는 이 xargs유틸리티를 사용하여 파일 데이터를 읽고 해당 내용을 프로그램에 인수로 전달할 수 있습니다.

$ xargs -a test1.in ./prog
2

답변2

당신이 작성한 프로그램:

#!/bin/bash
num=$(($1 + $2))
echo "$num"

$1예상 합계 값 $2(위치 매개변수)은 프로그램(스크립트)의 매개변수 목록에 제공됩니다.
이와 같은 프로그램이 작동하려면 다음과 같이 호출해야 합니다.

$ ./prog 3 5 
8

각 매개변수 $1및 를 $2호출 명령줄에 배치합니다.


파일에서 입력을 읽는 프로그램이 필요한 경우 read를 사용해야 합니다.

#!/bin/bash
read var1
read var2
num=$((var1 + var2))
echo "$num"

그러면 다음과 같이 호출할 수 있습니다.

$ ./newprog < test1.in
2

관련 정보