Shell脚本从txt文件读取变量?

时间:2016-02-04 01:00:26

标签: bash shell

我有一个如下所示的文本文件:

的test.txt:

date="2015-01-02"
week="3"

我还有一个shell脚本,它从上面的文本文件中获取变量:

test.sh

#!/bin/sh
source test.txt
echo $week

当我运行./test.sh时,我收到此错误: week: command not found

我想我可以在这里遵循这个优雅的解决方案:https://askubuntu.com/questions/367136/how-do-i-read-a-variable-from-a-file

但似乎只适用于bash脚本。

我如何为shell脚本执行此操作?

2 个答案:

答案 0 :(得分:1)

我认为你的来源"声明可能有路径问题。 请考虑以下输出:

我添加了一些命令,比如ps -f(为了说服自己它确实在sh中运行,而不是bash)。还有一些回声表明发生了什么。

(作为一个想法,我也尝试用" xyz.txt"而不是" bar.sh",仍然是相同的行为。)

输出

sh-4.1$ ./foo.sh
--- begin ps ---
UID        PID  PPID  C STIME TTY          TIME CMD
userabc   3352  3350  0 18:05 pts/0    00:00:00 /bin/bash
userabc   3523  3352  0 18:09 pts/0    00:00:00 sh
userabc   3778  3523  0 18:18 pts/0    00:00:00 /bin/sh ./foo.sh
userabc   3779  3778  0 18:18 pts/0    00:00:00 ps -f
--- end ps ---
Trying just 'bar.sh'
./foo.sh: line 8: source: bar.sh: file not found
week=
date=
Now trying './bar.sh' (note the leading ./ )
week=3
date=2015-01-02
Done.
sh-4.1$ 

最大的区别是两个源语句;看起来像源需要一个合格的路径。通常我会说。 ./bar.sh 但这或多或少是习惯,因为我总是使用./whatever.sh来调用给定的shell脚本。

测试脚本遵循......

foo.sh

#!/bin/sh

echo --- begin ps ---
ps -f
echo --- end ps ---

echo "Trying just 'bar.sh'"
source bar.sh
echo week=$week
echo date=$date


echo "Now trying './bar.sh' (note the leading ./ )"
source ./bar.sh
echo week=$week
echo date=$date

echo Done.

bar.sh

date="2015-01-02"
week="3"

答案 1 :(得分:1)

你的test.txt很好。

对于test.sh,将其更改为:

#!/bin/bash
source ./test.txt
echo $week

输出是: 3