![将输入从文件重定向到程序](https://linux22.com/image/103074/%E5%B0%86%E8%BE%93%E5%85%A5%E4%BB%8E%E6%96%87%E4%BB%B6%E9%87%8D%E5%AE%9A%E5%90%91%E5%88%B0%E7%A8%8B%E5%BA%8F.png)
我尝试编写一个可以从文件读取输入的程序,但遇到了困难。我的程序是:
#!/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