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

相关推荐
zhangfeng113317 分钟前
ps aux讲解,结合国家超算中心 hpc apptainer
linux·服务器·网络
夜月yeyue22 分钟前
STM32 DMA 双缓冲采样
linux·stm32·单片机·嵌入式硬件·系统架构
ScilogyHunter23 分钟前
Buildroot完全指南:从入门到实战
linux·嵌入式·buildroot
一楼的猫28 分钟前
茄子写作助手——品牌搜索突破9万后的技术型品牌认知与官网入口指南
人工智能·学习·机器学习·chatgpt·ai写作
毕竟是shy哥31 分钟前
Claude Code 接入 DeepSeek 保姆级教程,WSL/Linux 通用
linux·安装教程·codex·deepseek·claude code·openclaw
AOwhisky40 分钟前
学习自测与解析:MySQL第五、六、七期核心知识点详解
运维·数据库·笔记·学习·mysql·云计算
无限进步_43 分钟前
从零实现一个迷你Shell——深入理解Linux命令行解释器
linux·运维·服务器·开发语言·c++·chrome
阿标在干嘛1 小时前
政策平台的推送系统:消息队列、定时任务、AB测试的工程实践
服务器·数据库·ab测试
niuniuyi~1 小时前
QT学习笔记
笔记·qt·学习
咸甜适中1 小时前
rust语言学习笔记Trait(十六)Error(错误)
笔记·学习·rust