我开发了一个 shell 脚本,它使用 schema id 和密码作为参数来使用 sqlplus 登录数据库,运行查询并邮寄结果。
下面是代码片段:
#!/bin/sh
#Two input parameters USER_ID and Password
DB_USER=$1
DB_PWD=$2
result=`sqlplus -s $DB_USER@D1TFDDS/$DB_PWD<<EOF
spool sample.txt
sql query
spool off
EOF`
v1_result=`cat sample.txt | sed -e 's/ //g' | tr " " "\n"`
echo "${v1_result}" > mail.txt
mailx -s "Samplemail" [email protected] < mail.txt
在这里传递 ID 和密码作为参数来获取结果。我不想将我的凭据传递给脚本,而是可以将其存储在具有受限权限的 .txt 文件中。
并将环境 ID 和架构名称作为参数传递给 .txt 文件,该文件将为我提供用户 ID 和密码。
答案1
你source
可以配置文件。
在你的脚本中你可以这样做:
#!/bin/sh
#...
CONFIG="${HOME}/myconfig"
DB_USER=""
DB_PWD=""
if [ -f "${CONFIG}" ]
then
. "${CONFIG}"
fi
#...
其中sources
(读取并执行命令)a配置文件 myconfig
在您的主目录中,如果存在dot operator
.
文件内容myconfig
:
DB_USER="admin"
DB_PWD="insecure"
答案2
如果您将凭据存储在如下文件中:
SCHEMA:DB_USER:DB_PWD
那么你可以这样做:
eval $(grep "^$SCHEMA:" credentials-file | awk -F : '{print "DB_USER=" $2 "; DB_PWD=" $3}')
从那时起,您可以使用 $DB_USER 和 $DB_PWD。
请注意,这假设 DB_USER 或 DB_PWD 字段中没有特殊字符,即 shell 特有的字符,例如;
、&
等(
。如果有,您将必须更改命令awk
以添加额外的引号。