#!/bin/bash ssql -d cibfl -U edw_user -c "select relname from pg_class where relnamespace=16596 and relkind='p'" > all_odsname.log hangshu=$[$(awk '{print NR}' all_odsname.log | tail -n1)-2] hangshu2=$[$hangshu-2] head all_odsname.log -n $hangshu | tail -n $hangshu2 > all_odsname.list while read backTime do mkdir /data1/init/$backTime while read line do echo ods_db.$line$backTime is copying ssql -d cibfl -U seabox -c "COPY ods_db.$line$backTime TO '/data1/init/$backTime/$line.txt' (delimiter '|') ;" done < all_odsname.list tar -cvPf /data1/init/$backTime.tar /data1/init/$backTime rm -rf /data1/init/$backTime echo ------------ftping-------------- ftp -i -v -n 15.8.17.6 << EOF user dw_ftp dw!123 binary lcd /data1/init/ bin put $backTime.tar bye EOF echo $backTime备份数据上传成功 完成系统时间 $(date +%Y%m%d%n%H:%M) >> backup.log rm -f /data1/init/$backTime.tar done < backuptime.txt 优化一下脚本
时间: 2024-03-11 22:50:36 浏览: 15
为了优化该脚本,可以考虑以下几点:
1. 减少文件操作次数:可以将查询结果直接存入数组中,避免频繁读取文件。例如:
```bash
# 将查询结果存入数组all_odsname中
all_odsname=($(ssql -d cibfl -U edw_user -c "select relname from pg_class where relnamespace=16596 and relkind='p'"))
# 遍历数组进行操作
for line in "${all_odsname[@]}"; do
echo ods_db.$line$backTime is copying
ssql -d cibfl -U seabox -c "COPY ods_db.$line$backTime TO '/data1/init/$backTime/$line.txt' (delimiter '|') ;"
done
```
2. 减少循环次数:可以将多个查询结果合并为一个查询语句,避免多次查询。例如:
```bash
# 将查询语句合并为一个语句
ssql -d cibfl -U seabox -c "COPY ods_db.$(echo "${all_odsname[@]}" | tr ' ' ',') TO '/data1/init/$backTime/' (delimiter '|') ;"
```
3. 优化文件传输:可以使用rsync命令代替ftp命令进行文件传输,rsync命令支持增量传输,传输速度更快。例如:
```bash
rsync -avz /data1/init/ dw_ftp@15.8.17.6:/data1/init/
```
综上所述,优化后的脚本如下:
```bash
#!/bin/bash
# 将查询结果存入数组all_odsname中
all_odsname=($(ssql -d cibfl -U edw_user -c "select relname from pg_class where relnamespace=16596 and relkind='p'"))
# 遍历backuptime.txt中的时间,并进行操作
while read backTime; do
mkdir /data1/init/$backTime
ssql -d cibfl -U seabox -c "COPY ods_db.$(echo "${all_odsname[@]}" | tr ' ' ',') TO '/data1/init/$backTime/' (delimiter '|') ;"
tar -cvPf /data1/init/$backTime.tar /data1/init/$backTime
rm -rf /data1/init/$backTime
echo ------------rsyncing--------------
rsync -avz /data1/init/ dw_ftp@15.8.17.6:/data1/init/
echo $backTime备份数据上传成功 完成系统时间 $(date +%Y%m%d%n%H:%M) >> backup.log
rm -f /data1/init/$backTime.tar
done < backuptime.txt
```