免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2551 | 回复: 0
打印 上一主题 下一主题

[故障求助] 一个shell编程遇到的数组赋值问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2005-08-24 17:06 |只看该作者 |倒序浏览
各位大侠,今天遇到一个问题,其实比较简单,但是我搞了一下午才搞定,但是还是有些不明白有些问题。
事情是这样的:
有一个数据库的一个目录下面每天都会备份当天的数据文件,格式像这样:xxx_20050825.dmp.Z,因为空间有限所以我需要运行一个脚本把老的备份文件都删除,留下最近三天的。
-----------------------------------
DATE=`date +"%Y%m%d %H:%M:%S"`
DB_PT=/tmp/tmp
DB_USER=dbuser
DB_MAXCOUNT=3
CURR_FILE_COUNT=`ls -al ${DB_PT}/${DB_USER}*.dmp.Z|wc -l`
#--remove files--
function remove_files
{
FILE_DATE=`ls -al ${DB_PT}/*.dmp.Z|awk '{print $9}'|awk -F. '{print $1}'|awk -F_ '{print $2}'`
set -A DMPFILE
DMPFILE=(${FILE_DATE})
#echo ${DMPFILE[@]}
#echo ${DMPFILE[0]}
#echo ${DMPFILE[1]}
#echo ${DMPFILE[2]}
MINDATE=${DMPFILE[0]}
-----------------------------------
大家看我加粗加下划线的那一行,我想把取得的${FILE_DATE}的值如(20050101 20050202 20030201。。。。)赋值给一个数组DMPFILE,我去取DMPFILE[0]就会取的日期最小的文件,这样就可以来删除了,这只是程序的一部分,问题是在AIX的环境中我这样赋值给DMPFILE数组,就会把整个的数据赋值给DMPFILE数组,而且DMPFILE数组只有一个元素。我在别的系统下测试没有这个问题,环境的shell都是ksh,难道是AIX有什么特别吗?大家在给一个数组一次赋很多值的时候是如何做的呢?
后来用了这样的方法:
----------------------------------
#!/bin/ksh
DATE=`date +"%Y%m%d %H:%M:%S"`
DB_PT=/tmp/tmp
DB_USER=dbuser
DB_MAXCOUNT=3
CURR_FILE_COUNT=`ls -al ${DB_PT}/${DB_USER}*.dmp.Z|wc -l`
#--remove files--
function remove_files
{
integer R=0
set -A DMPFILE $(ls ${DB_PT}/${DB_USER}_*.dmp.Z)
for I in ${DMPFILE[@]}
do
  a=${DB_PT}/${DB_USER}_
  b=.dmp.Z
  c=${I#$a}
  c=${c%$b}
  FILE_DATE[$R]=$c
  R=${R}+1
done
MINDATE=${FILE_DATE[0]}
[/u
-----------------------------------
请注意加粗加下划线的部分,要实现的功能和上面一样。
有谁遇到这样的问题和大家分享一下,我看到的shell例子中都是一个一个给数组元素赋值。。。。。。。。。。。。。。。。。。。。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP