首页 > 代码库 > SHELL笔记9
SHELL笔记9
文件类型:普通文件、目录文件、套接字文件、设备文件、链接文件
判断一个文件是否是符号链接文件。是,将其移动到/etc目录下;不是,不做处理。
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
设计一个shell程序,给用户一个提示菜单,根据用户的选择进行相应的操作。菜单的选项有以下4个:
(1)启动vi编辑器
(2)启动X-window,进入图形界面
(3)启动后台打印进程,根据输入的文件名打印指定的文件。
(4)提示按组合键Ctrl+C退出程序
当用户的选择不符合以上菜单项时,重新显示菜单。
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
设计一个shell程序,实现菜单功能,即根据用户输入的不同执行相应的操作。菜单如下所示。
(1)当用户输入start时,在后台启动应用程序myfiles
(2)当用户输入stop时,关闭在后台运行的myfiles程序
(3)当用户输入status时,查看myfiles进程的相关信息
(4)当用户输入quit时,显示Quit,Thanks并退出程序
当用户输入非start、stop、status、quit时,循环显示菜单。 本例中假定myfiles是保持在当前目录下的可执行程序。
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
touch file, 创建文件file
设计一个shell程序,在每月1日0:00备份并压缩/etc目录的所有文件及子目录。备份文件存放在/root/etcbak目录里,被备份文件的名称按如下格式:YYMMDDD_etc.tar.gz,其中YY表示年份,MM表示月份,DD为日。
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!"
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!"
注:date与+之间必须有空格,不然执行时出错; 15行,DD必须用{}括起来,不然$DD_test输出为空
为了实现每月1日定时自动备份,需要进一步编写任务定时器。首先,将程序a.sh保存到/usr/bin目录下,然后使用crontab -e命令添加定时任务,如下所示。
# 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]:
选择3,然后输入0 0 1 * * /usr/bin/a.sh
通过shell编程,可以一次对多个具有相似特征的文件或目录进行统一备份
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
为了实现每隔50分钟定时自动备份,需要进一步编写任务定时器。首先,将程序a.sh保存到/usr/bin目录下,然后使用crontab -e命令添加定时任务,如下所示。
0 /50 * * * * /usr/bin/a.sh
设计一个shell程序,自动登录到远端ftp服务器192.168.20.122,自动下载/etc/rc.d目录下的rc.local文件。登录服务器时使用的用户名为teacher,密码为654321,采用二进制传输模式,且在下载时利用哈希显示下载进度。
用到了ftp的一些常用命令,如bin、hash、get、bye等。
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表示不允许自动登录
编写一个shell程序,对系统的重要资源进行备份,备份内容包括:
(1)系统配置文件,即/etc/rc.d目录中的所有文件
(2)/etc目录下的所有配置文件,即.conf文件
(3)系统日志文件,即/var/log目录中的所有文件
备份后,将备份文件通过ftp传输到远端主机192.168.20.122上,且登录ftp的用户名为teacher、密码为654321。ftp连接采用二进制传输模式,显示上传进度及提示显示
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
为了实现每周一 0:00定时自动备份及文件上传操作,需要进一步编写任务定时器。首先将程序a.sh保存到/usr/bin目录下,然后使用crontab -e命令添加定时任务。
1 0 * * mon /usr/bin/a.sh
SHELL笔记9