首页 > 解决方案 > 从配置文件中的一个变量中读取多个值。我想用 ksh 连接 oracle db 并进行查询

问题描述

大家好,

我需要编写从配置文件中读取变量并连接到 Oracle db 的脚本,然后执行一些查询并将结果保存在日志文件中。

在我的文件中连接数据库是行

sqlplus $Username/$Userpassword@Enviroment

比我有执行一个查询并将结果保存在日志文件中的功能。

虽然我只有一个环境,但它一切正常,但我需要升级这个脚本,它从配置文件中获取环境值并循环运行。

在配置文件中我有这样的信息

用户名=用户用户密码=通过环境=Env1,Env2,Env3,EnvX

问题是 skript 像一个值一样读取 Enviroment=Env1,Env2Env3,EnvX 而不会像 ... Enviroment=Env1 那样拆分并连接数据库并做一些工作

Enviroment=Env2 并连接数据库并做一些工作....

我有看起来像这样的 for 循环

for Test in $(echo $Enviroment | sed "s/,/ /g") do echo "do some job" done

使用此功能,我可以拆分环境名称。程序理解后“,”开始下一个变量。

它的作品,但只在脚本结束。在程序开始时,程序读取 $Enviroment 变量的值都像一个值并开始出现错误。我不知道如何将此函数放入我的脚本中并在大循环中编写所有内容

我希望你明白我有什么问题。我期望循环从配置文件中提取变量,如果有很多环境,这个循环会一一获取变量值并放入代码中。

标签: oracleshellvariablesconfigksh

解决方案


正如 rtoijala 所说,您应该始终提供一个最小的可重现示例。也就是说,使用我从您的文字中理解的内容,我制作了该代码。希望它能给你一些指示。

使用配置文件:

Username=user1 Userpassword=pass1 Enviroments=Env11,Env12,Env13,Env1X
Username=user2 Userpassword=pass2 Enviroments=Env21,Env22,Env23
Username=user3 Userpassword=pass3 Enviroments=Env31,Env32

这段代码:

#!/bin/ksh

while read -r a b c; do
        locUser=${a#*=}
        locPasswd=${b#*=}
        locEnv=${c#*=}
        arEnv=( ${locEnv//,/ } )
        for i in ${!arEnv[@]}; do
                print "sqlplus $locUser/$locPasswd@${arEnv[$i]}"
        done
done < ./config.txt

将产生:

sqlplus user1/pass1@Env11
sqlplus user1/pass1@Env12
sqlplus user1/pass1@Env13
sqlplus user1/pass1@Env1X
sqlplus user2/pass2@Env21
sqlplus user2/pass2@Env22
sqlplus user2/pass2@Env23
sqlplus user3/pass3@Env31
sqlplus user3/pass3@Env32

推荐阅读