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

相关推荐
Tonya4310 小时前
测开学习DAY37
学习
测试界的海飞丝15 小时前
10道软件测试面试题及其答案:
服务器·测试工具·职场和发展
t1987512815 小时前
在Ubuntu 22.04系统上安装libimobiledevice
linux·运维·ubuntu
skywalk816315 小时前
linux安装Code Server 以便Comate IDE和CodeBuddy等都可以远程连上来
linux·运维·服务器·vscode·comate
@游子16 小时前
内网渗透笔记-Day5
运维·服务器
晚风吹人醒.16 小时前
缓存中间件Redis安装及功能演示、企业案例
linux·数据库·redis·ubuntu·缓存·中间件
Yawesh_best16 小时前
告别系统壁垒!WSL+cpolar 让跨平台开发效率翻倍
运维·服务器·数据库·笔记·web安全
V***u45316 小时前
MS SQL Server partition by 函数实战二 编排考场人员
java·服务器·开发语言
Hard but lovely16 小时前
linux: pthread库的使用和理解
linux