从文本文件中读取不同的行,并在bash shell中设置不同的变量

时间:2017-02-09 14:43:59

标签: linux bash unix

我有一个不同行的文本文件,如:

VMNAME-1="blah1"
VMANME-2="blah2"
VMIP-1=12.34.56.78
VMIP-2=98.76.54.32
PASS="something"
USER="else"

我想阅读这个文本文件并在bash shell中使用这些值,如下所示:

create_vm.exp VMIP-1 USER PASS VMNAME-1
create_vm.exp VMIP-2 USER PASS VMNAME-2

关于如何做到这一点的任何建议?

2 个答案:

答案 0 :(得分:0)

如同先前的评论所述,你应该 只需使用source / path / to / file并执行您的脚本,
由于您的文本文件的语法就像变量初始化。

说明

采购实际上会运行您尝试在当前的来源中提供的文件 Bash环境。
当您打开终端并获取文本文件时,您可以使用
您设置的变量,如$ USER,$ PASS等。
您可以在脚本中执行相同的操作,以执行其他脚本。

答案 1 :(得分:0)

如果等号左侧的符号名称未包含-,那么您可以简单地source脚本,因为所有行都是有效的Bash表达式。

但是,这不是这种情况,因为VMNAME-1和其他人确实包含-,因此VMNAME-1在Bash中不是有效的变量名。

如果您确定等号后面的所有值都不包含-,那么您只需将-的所有匹配项替换为_即可使行有效Bash像这样的表达式:

. <(tr -- - _ < input.txt)

然后您可以编写如下的create VM命令:

create_vm.exp "$VMIP_1" "$USER" "$PASS" "$VMNAME_1"
create_vm.exp "$VMIP_2" "$USER" "$PASS" "$VMNAME_2"

如果值可能包含-,那么您需要更加努力地仅在等号的左侧替换-。这是一个可能的简单解决方法,在某些情况下可以使用,但可能不是全部:

. <(sed -e '/^V/s/-/_/' < input.txt)

仅在以-开头的行中替换V,并且仅替换首次出现的行。