因为最近经常在PLSQL上导入导出表结构,全量导出,部分导入,就得一张表一张表的搜索复制粘贴,效率贼低,于是乎就有了写shell脚本的想法。
直接说步骤吧,1.把需要导入的表名放入tab.txt;2.把导出的sql文件放到相同路径;3.把该脚本放到相同路径执行即可
在下shell菜鸟,有需要写一些简单的脚本可以联系我秋秋786824023,无偿。注意是简单的o.O
#!/bin/bash
# create by LJZ on 2019/7/8
# 功能:从获取指定列表的表结构
# 参数:$1 源文件名
# 步骤:
# 1.当前路径下准备表列表tab.txt
# 2.执行 sh get_tab_desc.sh RDS_rwa_tables_20190705.sql
# 3.当前路径下会生成表结构文件tab_desc.sql
# 注意:
# 1.如果带用户名,则需要改下程序!create table改为create table user. 或者把文件中的用户全部去掉
# 2.源文件的文件类型如果是dos,则需要转成unix set ff=unix
#
file_name=$1
#输入表文件名
in_file="tab.txt"
#输出表结构文件名
out_file="tab_desc.sql"
sum=`cat $in_file | wc -l`
succeed=0
failed=0
function mk(){
start_num=`cat -n $file_name | grep -i "create table $1$" | awk '{print $1}'`
if [ X$start_num == X"" ];then
echo "ERROR:${1}没找到create语句,生成失败!"
failed=$(($failed+1))
return 0
fi
cut_num=`cat -n $file_name | tail -n +$start_num | grep -i "create table" | awk '{print $1}' | sed -n '2p'`
if [ "X$cut_num" == "X" ];then
cut_num=`cat $file_name | wc -l`
fi
end_num=`cat -n $file_name | head -n +$cut_num | tail -n +$start_num | grep ";" | tail -n -1 | awk '{print $1}'`
head -n +$end_num $file_name | tail -n +$start_num >> $out_file
succeed=$((succeed+1))
return 0
}
if [ ! -f "$file_name" ];then
echo `pwd`"/${file_name}没有准备好!"
exit 0
fi
if [ ! -f "$in_file" ];then
echo `pwd`"/${in_file}没有准备好!"
exit 0
fi
echo "清空${out_file}文件!"
echo "开始生成!"
> $out_file
for tab in `cat $in_file`
do
mk $tab
done
echo "总计:${sum}条,成功:${succeed}条,失败:${failed}条."
echo "生成文件:"`pwd`"/$out_file"
echo "运行结束!"
exit 0