oracle - 从配置文件中的一个变量中读取多个值。我想用 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 变量的值都像一个值并开始出现错误。我不知道如何将此函数放入我的脚本中并在大循环中编写所有内容
我希望你明白我有什么问题。我期望循环从配置文件中提取变量,如果有很多环境,这个循环会一一获取变量值并放入代码中。
解决方案
正如 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
推荐阅读
- sql - 为什么“IN”查询标签在sql存储过程中的开销如此之大?
- angular - 如何以角度获取 URL?
- c# - 为什么使用“RenderTargetBitmap”类会使 GDI 句柄数增加?
- encryption - GPG - 以非交互方式更改密码
- c# - PayPal - 如何在 PayPal 订单请求正文中动态创建订单项?
- curl - 仅从 FTP 下载二进制文件的标头
- crystal-reports - 水晶报表如何向下然后跨栏
- django - 我需要在 Kubernetes 中使用 NGINX 来进行 Flask/Django 部署吗?
- python - Sqlalchemy - 连接到 Microsoft Azure - 活动目录密码
- jmeter - Jmeter:JSON文件中的变量不会被提取的值改变