LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 846|回复: 7

新手提问:关于备份~

[复制链接]
发表于 2006-11-4 17:18:42 | 显示全部楼层 |阅读模式
本人linux才起步,要写这样一个shell脚本:
目的将uid为500~999的用户主目录定期以tar.gz格式打包到/backupdata目录下(uid500~599的周一备份,600~699的周二备份......800~899的周五备份),要求.tar.gz包名为日期和用户名,比如:2006年11月4把用户user001主目录打包到/backupdata/20061104user001.tar.gz

以下是我写的,不过有错误,望各位法师帮忙改正下啊,谢谢了~
#!/bin/bash
if [ -d /backupdata ]
   then exit 1
else mkdir /backupdata
   exit 0
fi

riqi=`date +%Y%m%d`
xingqi=`date +%w`

beifen()
{
   while read name dir
      do
         if `tar -cf /backupdata/$riqi$name.tar.gz $dir`
           then exit 0
         else tar -cf /backupdata/$riqi$name.tar.gz $dir 2> /var/log/backupdata.log
            exit 1
          fi
      done < getfile.txt
}

if [ $xingqi -eq 1 ]
   then sed 's/:/ /g' /etc/passwd | awk -F: '($3>499 && $3<600){print$1,$6}' >getfile.txt
   beifen

elif [ $xingqi -eq 2 ]
   then sed 's/:/ /g' /etc/passwd | awk -F: '($3>599 && $3<700){print$1,$6}' >getfile.txt
   beifen

elif [ $xingqi -eq 3 ]
   then sed 's/:/ /g' /etc/passwd | awk -F: '($3>699 && $3<800){print$1,$6}' >getfile.txt
   beifen

elif [ $xingqi -eq 4 ]
   then sed 's/:/ /g' /etc/passwd | awk -F: '($3>799 && $3<900){print$1,$6}' >getfile.txt
   beifen

elif [ $xingqi -eq 5 ]
   then sed 's/:/ /g' /etc/passwd | awk -F: '($3>899 && $3<1000){print$1,$6}' >getfile.txt
   beifen

else exit 1
fi

以上是脚本内容不知道哪里有问题,劳烦各位大虾和法师帮忙改正啊,
非常感谢了~~
 楼主| 发表于 2006-11-4 17:21:56 | 显示全部楼层
由于刚刚学,缺乏经验,我自己怎么也找不到错哪里,大家帮帮忙咯。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-11-4 17:32:32 | 显示全部楼层
由于刚刚学,缺乏经验,我自己怎么也找不到错哪里,大家帮帮忙咯。
回复 支持 反对

使用道具 举报

发表于 2006-11-6 18:03:39 | 显示全部楼层
你把错误信息写出来???
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-11-10 18:40:57 | 显示全部楼层
执行这个脚本没有任何提示,这个就是错误啊,没有完成预期的任务
回复 支持 反对

使用道具 举报

发表于 2006-11-10 19:41:16 | 显示全部楼层
你看看你这句:
then sed 's/:/ /g' /etc/passwd | awk -F: '($3>499 && $3<600){print$1,$6}' >getfile.txt
你既然把符号(:)替换成空格了,那你干吗还要以符号(:)为分隔符那,这样能取到值码???
如果你想以:为分隔符,那你直接这样写:then  awk -F: '($3>499 && $3<600){print$1,$6}' >getfile.txt就可以了阿。你看是不???
再或者按你的思路。那也应该这样写:then sed 's/:/ /g' /etc/passwd | awk  '($3>499 && $3<600){print$1,$6}' >getfile.txt,就可以了。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-11-11 09:15:50 | 显示全部楼层
谢谢 我试试   不懂再问
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-11-11 09:40:08 | 显示全部楼层
在高人指点下 自己发现一个问题,exit 0  纯属多于
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表