一道shell脚本的题

 今天花了好久写了一道shell脚本的题,因为好久没写shell了,所以把它放在这里留作纪念...过几年我用来面试么...

1.       编写一个叫做 homebackup 的脚本来自动执行 tar,这样他执行脚本的时候总能使用需要的选项 (cvp) 和备份他或她的主目录的目标目录 (/var/backups) 实现以下功能:

1).      测试参数的个数。脚本应该无参数运行。如果提供了任何参数,在退出后打印一条使用方法消息。

2).      询问用户想要执行完全备份还是增量备份。如果用户还没有完全备份文件,打印一条消息通知用户将进行完全备份。如果是增量备份,只在完全备份是近一个星期时候才执行。

3).      使用压缩工具对备份进行压缩。通知用户脚本正在执行此任务,因为这将耗费一些时间而用户会因为没有在屏幕上看到输出而担心。

4).      打印一条消息通知用户有关压缩备份的大小。

答案:

  
  
  
  
  1. #!/bin/bash 
  2. [ "$#" -gt 0 ] && echo "The argument is error !" && exit 1 
  3.  
  4. hasFullBackup=$(ls /var/backups | grep home.tar.bz2) 
  5. if [ "$hasFullBackup" == "" ]; then 
  6.     echo "we will do full backup to you" 
  7.     isFullBackup="Y" 
  8. else  
  9.     read -p "Do you want full backup or incremental backup(Y/full, N/incremental)? " isFullBackup 
  10. fi 
  11.  
  12. if [ "$isFullBackup" == "Y" -o "$isFullBackup" == "y" ]; then 
  13.     dump -0u -f /var/backups/home.dump /home 
  14.     tar -jcv /var/backups/home.dump  -f /var/backups/home.tar.bz2 
  15.     rm -rf /var/backups/home.dump /var/backups/home1.tar.bz2 
  16. else 
  17.     isWeekBackup=$(find /var/backups/home.tar.bz2 -mtime -7) 
  18.     if [ "$isWeekBackup" != "" ]; then 
  19.         tar -jx -f /var/backups/home.tar.bz2 -C /var/backups/home.dump         
  20.         dump -1u -f /var/backups/home.dump.1 /home 
  21.         tar -jcv /var/backups/home.dump.1  -f /var/backups/home1.tar.bz2 
  22.         rm -rf /var/backups/home.dump.1 /var/backups/home.dump 
  23.     else 
  24.         isFullBackup="Y" 
  25.         dump -0u -f /var/backups/home.dump /home 
  26.         tar -jcv /var/backups/home.dump  -f /var/backups/home.tar.bz2 
  27.         rm -rf /var/backups/home.dump /var/backups/home1.tar.bz2 
  28.     fi        
  29. fi 
  30.  
  31. space=$(du -sh /var/backups/home.tar.bz2 | sed 's/\/.*$//g') 
  32. echo "The full backup space is $space" 
  33. if [ "$isFullBackup" != "Y" -a "$isFullBackup" != "y" ]; then 
  34.     space1=$(du -sh /var/backups/home1.tar.bz2 | sed 's/\/.*$//g') 
  35.     echo "The incremental backup space is $space1" 
  36. fi 
  37. exit 0     
     

 

 

 

 

 

你可能感兴趣的:(shell,shell脚本,题目)