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

Query script format giving unexpected end of file

我经常执行某个查询,想为 运行 编写一个简单的 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

Returns

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

帮我指出正确的修复方向

我不熟悉 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