将输入从文件重定向到程序

将输入从文件重定向到程序

我尝试编写一个可以从文件读取输入的程序,但遇到了困难。我的程序是:

#!/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

相关内容