查询脚本格式,给出意外的文件结束

时间:2017-03-15 14:33:25

标签: bash informix

我经常执行某个查询,并希望编写一个简单的bash脚本来运行。当我将其设置为以下

运行时
#!/bin/bash

dbaccess davedb <<! 2>/dev/null
set isolation dirty read;
SELECT cpe_localization_code
FROM hct_profile
WHERE hct_mac_address = '$mac';

它有效但我必须硬设置$ mac变量并尝试将其设置为从文件中读取。

如果我像这样构造它是从文件中读取但是每次都会显示并回显,所以我在屏幕上弄得一团糟。

#!/bin/bash

OLDIFS=$IFS
IFS="/t"
file=list.csv

while read mac; do

echo "SET isolation dirty read;
SELECT cpe_localization_code
FROM hct_profile
WHERE hct_mac_address = '$mac'
;" | dbaccess davedb

done <"$file"
IFS=$OLDIFS

返回

Database selected.


Isolation level set.



cpe_localization_+

82345

1 row(s) retrieved.



Database closed.


Database selected.


Isolation level set.



cpe_localization_+

82345-1

1 row(s) retrieved.



Database closed.

我尝试了这个,但却给了我意想不到的文件结尾。

#!/bin/bash

OLDIFS=$IFS
IFS="/t"
file=list.csv

while read mac; do

dbaccess davedb <<! 2>/dev/null
set isolation dirty read;
SELECT cpe_localization_code
FROM hct_profile
WHERE hct_mac_address = '$mac';

done <"$file"
IFS=$OLDIFS

帮助我指出正确的方向来修复

1 个答案:

答案 0 :(得分:1)

我不熟悉dbaccess命令,但如果它是一个交互式命令,你可以像这样使用它:

#!/bin/bash

OLDIFS=$IFS
IFS="/t"
file=list.csv

while read mac; do

dbaccess davedb <<EndOfQuery 2>/dev/null
set isolation dirty read;
SELECT cpe_localization_code
FROM hct_profile
WHERE hct_mac_address = '$mac';
EndOfQuery

done <"$file"
IFS=$OLDIFS

你的剧本几乎就在那里。您只需在文件结束前终止here-doc