我现在有一个脚本,它读取变量,然后对它们进行操作,如下所示;
#!bin/bash
a=10
b=15
c=20
d=a*b+c
echo $d
但是我想将其分成一个输入文件,其中包含:
a=10
b=15
c=20
和执行操作的脚本
#!/bin/bash
d=a*b+c
echo $d
并且会被调用类似这样的东西。
./script.sh < input.in
现在我已经做了一些挖掘,并尝试做一个简单的。
./script.sh < input.in
这样它就会返回答案 170
但这行不通。经过进一步挖掘,似乎在脚本中需要使用命令“source”,但我不确定在这种情况下该怎么做。
能做到吗?做这个的最好方式是什么?
答案1
从help source
:
source: source filename [arguments]
Execute commands from a file in the current shell.
Read and execute commands from FILENAME in the current shell. The
entries in $PATH are used to find the directory containing FILENAME.
If any ARGUMENTS are supplied, they become the positional parameters
when FILENAME is executed.
Exit Status:
Returns the status of the last command executed in FILENAME; fails if
FILENAME cannot be read.
因此,在脚本中,您只需要添加这一行:
source input.in
或者这个(POSIX 版本):
. input.in
要在运行时传递输入文件,您可以使用位置参数:
source "$1"
. "$1"
另请注意,除非具有“整数”属性,d=a*b+c
否则它将不起作用:d
declare -i d
d=a*b+c
或者你使用算术展开执行操作:
d=$((a*b+c))
例子:
#!/bin/bash
source "$1"
d=$((a*b+c))
echo "$d"
$ ./script.sh input.in
170
答案2
这是一个非常基本的操作。只是source
一个.
文件名,结果就像这些行包含在您的主脚本中一样。
语法很简单:
source file_name
或者
. file_name
有一些细微差别,但这是更高级的。请参阅man bash | grep source
了解更多详情。