Linux Shell脚本-分隔符问题
工作中写shell脚本时遇到读取文件并按分隔符解析每行数据,分隔符单独一行,导致通过地址参数登录数据库报错,需要将分隔符写入循环条件中。
分隔符单独一行:
#!/bin/bash
ora_data()
{
# 设置分隔符
IFS='|'
# 读取文件中的每一行
# 读取客户号变更文件并创建临时表导入 clientno.txt文件格式:序号|新客户号|旧客户号
while read -r field1 field2 field3
do
# 打印读取的字段
# echo $field1,$field2,$field3
# 拼接sql语句写到 clientno_import.sql文件中
echo "insert into clientnotmp values ('"$field1"','"$field2"','"$field3"');" >> clientno_import.sql
done < clientno.txt
${_DATASOURCE_CONN_} <<-!
select * from tbsysinfo;
exit
!
}
_DATASOURCE_CONN_="sqlplus -s ifm60/abc_123@10.22.2.2:1521/orcl"
ora_data
报错信息:
[dbmovegznsyh@oracle test]$ sh 1.sh
1.sh:行18: sqlplus -s ifm60/abc_123@10.22.2.2:1521/orcl: 没有那个文件或目录
将分隔符放至循环语句中:
#!/bin/bash
ora_data()
{
# 设置分隔符
# 读取文件中的每一行
# 读取客户号变更文件并创建临时表导入 clientno.txt文件格式:序号|新客户号|旧客户号
while IFS='|' read -r field1 field2 field3
do
# 打印读取的字段
# echo $field1,$field2,$field3
# 拼接sql语句写到 clientno_import.sql文件中
echo "insert into clientnotmp values ('"$field1"','"$field2"','"$field3"');" >> clientno_import.sql
done < clientno.txt
${_DATASOURCE_CONN_} <<-!
select * from tbsysinfo;
exit
!
}
_DATASOURCE_CONN_="sqlplus -s ifm60/abc_123@10.22.2.2:1521/orcl"
ora_data
执行结果:
[dbmovegznsyh@oracle test]$ sh 2.sh
P BANK_NO HOST_CHECK_DATE P DAYEND S INIT_DATE
- -------------------------------- --------------- - ------ - ----------
B 000 20200101 0 0 0 0
0 000 20200101 0 0 0 0
1 000 20200101 0 0 0 0
8 000 20200101 0 0 0 0