查询脚本格式给出意外的文件结尾
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。
我经常执行某个查询,想为 运行 编写一个简单的 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。