파일에서 입력을 읽을 수 있는 프로그램을 작성하려고 하는데 막혔습니다. 내 프로그램은 다음과 같습니다
#!/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