如何从shell脚本中读取文件中的数据

时间:2013-02-19 10:54:22

标签: shell

我有两个shell脚本文件 test1.sh和test2.sh 。我有另一个名为 translogs.txt 的文件 现在我需要将test1.sh中两个变量的值复制到translog.txt,并且需要将相同的变量复制到 test2.sh 中的相应值。

test1.sh

#!/bin/sh
ONE="000012"
TIME="2013-02-19 15:31:06"
echo -e "$ONE\n$TIME">translog.txt;

translog.txt

ONE="000012"
TIME="2013-02-19 15:31:06"

但是在 test2.sh 中,我想要与translog.txt中相同的值到相应的变量

test2.sh

#!/bin/sh
ONE="000012"
TIME="2013-02-19 15:31:06"

3 个答案:

答案 0 :(得分:2)

1 Diry解决方案

$> cat translog.txt
ONE="000012"
TIME="2013-02-19 15:31:06"

使用perl正则表达式grep可以使用 lookbehind 运算符匹配这些值。

$> grep --only-matching --perl-regex "(?<=ONE\=).*" translog.txt
"000012"

对于TIME

$> grep --only-matching --perl-regex "(?<=TIME\=).*" translog.txt
"2013-02-19 15:31:06"

因此,通过使用test2.sh脚本,您可以像这样使用它:

#!/bin/bash
ONE=`grep --only-matching --perl-regex "(?<=ONE\=).*" translog.txt`
TIME=`grep --only-matching --perl-regex "(?<=TIME\=).*" translog.txt`

2命令行解决方案

下面其中一个链接指出的另一个解决方案是使用: source(a.k.a。.)命令将文件中的所有变量加载到当前shell中:

$ source translog.txt

现在您可以访问文件中定义的变量值:

$ echo $TIME
"2013-02-19 15:31:06"

3最简单的解决方案

@ user2086768提到了另一种方法。把这些行放到`test2.sh:

#!/bin/bash
eval $(cat translog.txt)

因此,您将在test2.sh脚本中分配两个变量:

ONE="000012"
TIME="2013-02-19 15:31:06"

您可以轻松检查添加:

echo $ONE
echo $TIME

同时检查以下链接:

答案 1 :(得分:1)

由于translog.txt是有效的bash代码,您可以执行以下操作:

source translog.txt
test2.sh中的

ONETWO将在test2.sh中提供。

一句警告,如果ONETWO的值来自不受信任的来源,那么会打开shell脚本注入攻击。

答案 2 :(得分:0)

eval应该适合你。

尝试使用此版本的test2.sh:

<强> test2.sh

#!/bin/bash
eval $(cat translog.txt)
echo $ONE
echo $TIME

输出:

000012

2013-02-19 15:31:06