首页 > 代码库 > SHELL笔记9

SHELL笔记9

  1. 文件类型:普通文件、目录文件、套接字文件、设备文件、链接文件

  2. 判断一个文件是否是符号链接文件。是,将其移动到/etc目录下;不是,不做处理

  3.   1 #! /bin/bash
      2 #filename:a.sh
      3 FILENAME=
      4 echo "Input file name: "
      5 read FILENAME
      6 if [ -L $FILENAME ]
      7 then
      8   mv $FILENAME /etc
      9 fi
  4. 设计一个shell程序,给用户一个提示菜单,根据用户的选择进行相应的操作。菜单的选项有以下4个:

    (1)启动vi编辑器

    (2)启动X-window,进入图形界面

    (3)启动后台打印进程,根据输入的文件名打印指定的文件。

    (4)提示按组合键Ctrl+C退出程序

    当用户的选择不符合以上菜单项时,重新显示菜单。


  5.   1 #! /bin/bash
      2 #filename:a.sh
      3 echo "Please choose:(1-3, or ^c)"
      4 
      5 echo "1 vi"
      6 echo "2 X-window"
      7 echo "3 print-file"
      8 echo "Ctrl+c quit"
      9 
     10 read xyz
     11 if [ $xyz = 1 ]
     12 then
     13   vi
     14   exit 1
     15 elif [ $xyz = 2 ]
     16 then
     17   startx
     18   exit 1
     19 elif [ $xyz = 3 ]
     20 then
     21   echo "//Please enter filename"
     22   read filename
     23   lp $filename &
     24   exit 1
     25 else
     26  echo "---------------------------"
     27  /bin/sh a.sh
     28 fi
  6. 设计一个shell程序,实现菜单功能,即根据用户输入的不同执行相应的操作。菜单如下所示。

    (1)当用户输入start时,在后台启动应用程序myfiles

    (2)当用户输入stop时,关闭在后台运行的myfiles程序

    (3)当用户输入status时,查看myfiles进程的相关信息

    (4)当用户输入quit时,显示Quit,Thanks并退出程序

    当用户输入非start、stop、status、quit时,循环显示菜单。 本例中假定myfiles是保持在当前目录下的可执行程序。


  7.   1 #! /bin/bash
      2 #filename:a.sh
      3 i=1
      4 while [ "$i" -eq 1 ]
      5 do
      6   RESPONSE=
      7   echo "-----------------------------------------------"
      8   echo "Please choice:"
      9   echo "Input -- start -- start program myfiles."
     10   echo "Input -- stop --view status of myfiles process."
     11   echo "Input -- quit -- exit."
     12   echo "-----------------------------------------------"
     13   read RESPONSE
     14   case $RESPONSE in
     15     start) ./myfiles&;;
     16     stop) killall myfiles;;
     17     status) ps -aux | grep myfiles;;
     18     quit) i=0
     19       echo "Quit,Thanks"
     20       ;;
     21   esac
     22 done
  8. touch file, 创建文件file

  9. 设计一个shell程序,在每月1日0:00备份并压缩/etc目录的所有文件及子目录。备份文件存放在/root/etcbak目录里,被备份文件的名称按如下格式:YYMMDDD_etc.tar.gz,其中YY表示年份,MM表示月份,DD为日。

  10.   1 #! /bin/bash
      2 #filename:a.sh
      3 DIRNAME=`ls /root | grep subbak`
      4 echo $DIRNAME
      5 if [ -s $DIRNAME ]; then
      6   mkdir /root/subbak
      7 fi
      8 cd /root/subbak
      9 YY=`date+%y`
     10 MM=`date+%m`
     11 DD=`date+%d`
     12 BACKETC=$YY$MM$DD_etc.tar.gz
     13 tar zcvf $BACKETC /etc
     14 echo "File backup finished!"
  11.   1 #! /bin/bash
      2 #filename:a.sh
      3 DIRNAME=`ls /root | grep subbak`
      4 echo $DIRNAME
      5 if [ -s $DIRNAME ]; then
      6   mkdir /root/subbak
      7 fi
      8 cd /root/subbak
      9 YY=`date +%y`
     10 MM=`date +%m`
     11 DD=`date +%d`
     12 BACKETC=$YY$MM${DD}_test.tar.gz
     13 tar zcvf $BACKETC test
     14 echo "File backup finished!"
  12. 注:date与+之间必须有空格,不然执行时出错; 15行,DD必须用{}括起来,不然$DD_test输出为空
  13. 为了实现每月1日定时自动备份,需要进一步编写任务定时器。首先,将程序a.sh保存到/usr/bin目录下,然后使用crontab -e命令添加定时任务,如下所示。

  14. # crontab -e
    
    Select an editor.  To change later, run ‘select-editor‘.
      1. /bin/ed
      2. /bin/nano        <---- easiest
      3. /usr/bin/vim.basic
    
    Choose 1-3 [2]:
  15. 选择3,然后输入0 0 1 * * /usr/bin/a.sh
  16. 通过shell编程,可以一次对多个具有相似特征的文件或目录进行统一备份

  17.  1 #! /bin/bash
      2 #filename:a.sh
      3 i=0
      4 find / -name test > file
      5 if [ -d /home/si/test ]; then
      6   echo "/home/si/test already exists."
      7 else
      8   mkdir /home/si/test
      9   echo "/home/si/test is created."
     10 fi
     11 while read LINE
     12 do
     13   DIRS=$LINE
     14   BACKUP="/home/si/test/backup${i}.tar.gz"
     15   tar -zcvf $BACKUP $DIRS
     16   i=$(($i+1))
     17 done<file
  18. 为了实现每隔50分钟定时自动备份,需要进一步编写任务定时器。首先,将程序a.sh保存到/usr/bin目录下,然后使用crontab -e命令添加定时任务,如下所示。

    0 /50 * * * * /usr/bin/a.sh

  19. 设计一个shell程序,自动登录到远端ftp服务器192.168.20.122,自动下载/etc/rc.d目录下的rc.local文件。登录服务器时使用的用户名为teacher,密码为654321,采用二进制传输模式,且在下载时利用哈希显示下载进度。

    用到了ftp的一些常用命令,如bin、hash、get、bye等。

  20.   1 #! /bin/bash
      2 #filename:a.sh
      3 echo "open 192.168.20.121   #建立到192.168.20.121的连接
      4 user teacher 654321 #用户名和密码
      5 bin #采用二进制传输模式
      6 hash #进行hash,即以符号#表示传输的进度
      7 cd /etc/rc.d #切换到目录/etc/rc.d
      8 get rc.local #下载文件rc.local
      9 bye #结束本次ftp连接
     10 "|ftp -n  #-n表示不允许自动登录
  21. 编写一个shell程序,对系统的重要资源进行备份,备份内容包括:

    (1)系统配置文件,即/etc/rc.d目录中的所有文件

    (2)/etc目录下的所有配置文件,即.conf文件

    (3)系统日志文件,即/var/log目录中的所有文件

    备份后,将备份文件通过ftp传输到远端主机192.168.20.122上,且登录ftp的用户名为teacher、密码为654321。ftp连接采用二进制传输模式,显示上传进度及提示显示

  22. 1 #! /bin/bash
      2 #filename:a.sh
      3 mkdir -p /backup-sys
      4 if [ $? -eq 0 ] ; then
      5   tar zcvf /backup-sys/rc.tar.gz /etc/rc.d
      6   tar zcvf /backup-sys/conf.tar.gz /etc/*.conf
      7   tar zcvf /backup-sys/log.tar.gz /var/log
      8   cd /backup-sys
      9   if [ $? -eq 0 ]; then
     10     echo "open 192.168.20.121
     11     user teacher 654321
     12     binary
     13     prompt
     14     hash
     15     mput *
     16     bye" | ftp -n
     17   else
     18     echo "Could not into backup-sys directory!"
     19   fi
     20 else
     21   echo "Could not create backup directory!";
     22 fi
  23. 为了实现每周一 0:00定时自动备份及文件上传操作,需要进一步编写任务定时器。首先将程序a.sh保存到/usr/bin目录下,然后使用crontab -e命令添加定时任务。

    1 0 * * mon /usr/bin/a.sh



SHELL笔记9