我经常执行某个查询,并希望编写一个简单的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
帮助我指出正确的方向来修复
答案 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。