Shell脚本:如何从文件中输入变量值以使用提供的变量运行sql



我有一个包含两列和'n'个数据的文本文件。我正在运行一个shell脚本,它从shell脚本中定义的文件和输入变量中获取数据。

我的数据排列如下

HX_EXT TX_EXTHX_GAMER TX_GAMERHX_SALE TX_SALEHX_PERF TX_PERFHX_ACCESS TX_ACCESS。。。等等**

下面的Shell脚本从定义了变量的输入文件中获取数据。。

#!/bin/bash
set -x
FILE_PATH=/home/db2git1
INP_FILE=$FILE_PATH/FINAL_FILE.OUT
db2 connect to GIT1;
db2 -x "SELECT substr(SCHEMANAME, 1, 50) FROM SYSCAT.SCHEMATA where SCHEMANAME LIKE 'HX_%'" > SOURECSCHEMA.OUT
cp SOURECSCHEMA.OUT DESTINATIONSCHEMA.OUT
sed -i 's/IM1_/DMI_/g' DESTINATIONSCHEMA.OUT
paste SOURECSCHEMA.OUT DESTINATIONSCHEMA.OUT > FINAL_FILE.OUT
chmod +x SCHEMA_MIMMIC.sh
chmod +x DESTINATIONSCHEMA.OUT
chmod +x SOURECSCHEMA.OUT

while IFS= read -r line
do
VAR1=$(echo "$INP_FILE"|cut -f 1 -d '|')
VAR2=$(echo "$INP_FILE"|cut -f 2 -d '|')
done
db2 "CALL SYSPROC.ADMIN_COPY_SCHEMA("$VAR1","$VAR2",'COPY',NULL,'','','ERRORSCHEMA','ERRORTAB')"

~

但它以以下错误结束(特别是在按下回车键之前没有输出(。

+ cp SOURECSCHEMA.OUT DESTINATIONSCHEMA.OUT
+ sed -i s/IM1_/DMI_/g DESTINATIONSCHEMA.OUT
+ paste SOURECSCHEMA.OUT DESTINATIONSCHEMA.OUT
+ chmod +x SCHEMA_MIMMIC.sh
+ chmod +x DESTINATIONSCHEMA.OUT
+ chmod +x SOURECSCHEMA.OUT
+ IFS=
+ read -r line
++ echo /home/db2git1/FINAL_FILE.OUT
++ cut -f 1 -d '|'
+ VAR1=/home/db2git1/FINAL_FILE.OUT
++ echo /home/db2git1/FINAL_FILE.OUT
++ cut -f 2 -d '|'
+ VAR2=/home/db2git1/FINAL_FILE.OUT
+ IFS=
+ read -r line
++ echo /home/db2git1/FINAL_FILE.OUT
++ cut -f 1 -d '|'
+ VAR1=/home/db2git1/FINAL_FILE.OUT
++ echo /home/db2git1/FINAL_FILE.OUT
++ cut -f 2 -d '|'
+ VAR2=/home/db2git1/FINAL_FILE.OUT
+ IFS=
+ read -r line

调试模式没有抛出任何错误,并停留在上面粘贴的输出上。

如何修复此错误?

我想您错过了将文件名传递给while循环的机会。此外,当您尝试读取VAR1和VAR2时,我认为echo命令应该打印变量的内容,而不是文件名。

while IFS= read -r line
do
VAR1=$(echo "$line"|cut -f 1 -d '|')
VAR2=$(echo "$line"|cut -f 2 -d '|')
done < $INP_FILE

希望这有帮助:(

最新更新