开发者学堂课程【打开浏览器就能写代码!打造自己的Web IDE:部署Web IDE】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/453/detail/5603
zip包自动解压缩脚本
内容介绍
一、自动解压ZIP数据包脚本
二、使用函数封装
一、自动解压ZIP数据包脚本
如下脚本为自动解压zip包脚本,仅供参考,可以根据实际情况修改,可以举一反三,应用到其他的应用中。脚本中首行自动解压包,Define Path定义路径,测试路径中mkdir创建路径,cd到test1,生成passwd.zip,再定义两个变量PATH1,PATH2路径,打印欢迎信息,此处e!为修改后不保存,然后cd到PATH1下面,去for找i=in,find当前目录下所有等于这个路径的,并且awk以-F.为分隔的,打印出$2。找到对应的名字后解压,此处执行一遍,如,
[root@xuegod63 test]#vim zip-auto.sh
#!/bin/sh
#auto zip package
#Define Path
#####tes t######
mkdir -p / root/shell/test1 / root/shell/test2
cd /root/shell/test1 ; zip passwd.zip /etc/ passwd
#####test#######
PATH1=/ root/shell/ test1
PATH2=/ root/shell/test2
#Print welcome info
cat <
++---------welcome to use auto zip scripts-------+
EOF
#Find Dir all ZIP packages
查找目录PATH1下所有的zip包,并创建解压目录PATH2
cd $PATH1
for i in ‘find – name
“*.zip"|awk -F. ‘{print $2}'’
do
unzip -0 .$i.zip -d $PATH2$i
done
"zip-auto.sh" 23L,653C
[ root@xuegod63 test]# ./zip-auto.sh
adding: etc/passwd (deflated 59%)
++- -------------------------------------------------------++
++---------welcome to use auto zip scripts-------+
++--------------------------------------------------------++
Archive: ./ passwd.zip
inflating: / root/shell/test2/ passwd/etc/passwd
cd
到/root/shell/test1
路径会有一个压缩包,解压zip,如,
[ root@xuegod63 test2]# ls / root/shell/test1
passwd. zip
[ root@xuegod63 test2]# cd !$
cd /root/shell/test1
[ root@xuegod63 test1]# ls
passwd. zip
[ root@xuegod63 test1]# unzip passwd. zip
Archive: passwd . zip
inflating: etc/ passwd
[ root@xuegod63 test1]#ls
etc passwd.zip
[ root@xuegod63 test1]#ls etc/
passwd
[ root@xuegod63 test1]#ls etc/passwd
etc/passwd
如上cd到test1已经有etc/passwd文件了,说明解压成功,所以看不懂的命令可以执行一下。
接下来PATH1是源,PATH2是要解压到的地方,弹出欢迎信息,看不到长语句,可以执行一下,如find – name “*.zip"|awk -F,find查找将包含.zip的文件过滤出来,然后加awk可取出这个值,/passwd,因为有很多.zip所以也会有很多/passwd,每个值都在这个地方映示一个文件名的列表,第一次取值是passwd,取值后执行do中的语句,-d为解压到什么地方,如,
[ root@xuegod63 test1]# find . - name "* . zip"
. / passwd. zip
[ root@xuegod63 test1]# find . – name "*.zip"| awk -F. '{print $2}'
/passwd
[ root@xuegod63 test1]# unzip -o ./ passwd -d /opt/
Archive: . /passwd. zip
inflating: /opt/etc/ passwd
[ root@xuegod63 test1]# ls /opt/
etc webapp_ db. sql
[ root@xuegod63 test1]# ls /opt/etc/
passwd
[ root@xuegod63 test1]# unzip ./passwd -d /opt/
Archive: . /passwd. zip
此处-o参数为直接覆盖不显示,将压缩包解压到opt下,不写后缀名也可以,如,
[ root@xuegod63 test1]# unzip . /passwd -d /opt/
Archive: . / passwd . zip
inflating: /opt/etc/passwd
[ root@xuegod63 test1]# ls /opt/etc/ passwd
/opt/etc/passwd
$PATH1$i为合成路径,这里做下替换,PATH等于/root/shell/test2加上$i路径passwd,zip包则会解压到这个目录下,查看,如,
[ root@xuegod63 test]# ls / root/shell/test2/ passwd/
etc
[ root@xuegod63 test]# ls / root/ shell/test2/ passwd/ etc/ passwd
/ root/ shell/test2/ passwd/ etc/ passwd
[ root@xuegod63 test]#vim -
!$
root:x:0: 0: root:/ root: /bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon: x:2:2:daemon: /sbin:/sbin/ nologin
…
注意:for语句可以取得名字列表,除了用echo表示名字还可以用cat<。
当脚本不太好理解的时候可以通过-x进行分析。第一个是mkdir -p创建两个路径,然后cd进去,zip解压后弹出消息,两个变量赋值,赋值完后cat显示对应结果内容,再次cd到路径/root/shell/test1,替换变量,然后find查看当前目录下所有.zip,找到后通过awk -F去输出。
awk -F'{print $2}',是awk列操作,-F. 以.作为分隔符,print输入,$2表示第2列,输出完后通过awk取第二列内容,如,
[ root@xuegod63 test1]# find . -name '*.zip'| awk -F. '{print $2}'
/passwd
[ root@xuegod63 test1]# find . -name '* .zip'
./passwd. zip
然后是for循环语句,unzip解压会读出zip解压到/root/shell/test2/passwd,最后是解压过程信息。
二、使用函数封装
1、案例v2脚本
执行v2脚本,拷贝文件到opt,输入1操作,提示你的操作为Copy,然后会提示你输入源文件路径,和Copy到哪里,然后提示拷贝成功,如下
[ root@xuegod63 test]#./v2
v2.sh
v2-使用函数封装-公司自动处理文件备份管理的脚本.txt
[ root@xuegod63 test1]
#./ v2-使用函数封装-公司自动处理文件备份管理的脚本.txt
*******************
1 Copy
2 Delete
3 Baxkup
4 Quit
*******************
1
You selection is Copy
Please input source dircetory or file
/etc/ passwd
Please input destination dircetory
/opt
The files have been susscessfully copied
Press any key to continue. . .
此时按下任意键清屏,查看是否拷贝成功,如,
[ root@xuegod63 test]#ls /opt/
passwd
再在菜单下输入2,提示操作为删除,输入要删除的文件或目录,回车,如,
2
You selection is delete
Delete the file or dircetory
/ opt/passwd
Proceed with removal? y
y
sussessfully delete!
Press any key to continue...
按下任意键回车,查看是否删除成功,如,
[ root@xuegod63 test]#ls /opt/
[ root@xuegod63 test]#
在菜单下输入3,提示操作为备份,输入要备份的文件或目录,备份到哪里,如,
3
You selection is Back
Please input source dircetory or file
/boot
Please input destination dircetory
/opt
…
等待文件输出完,按下任意键后清屏
输入4,显示Exit…
2、案例v3脚本
下面运行v3版本
[ root@xuegod63 test
]#./ v3-使用函数封装-公司自动处理文件备份管理的脚本.txt
bash interpreter:No such file or directory
[ root@xuegod63 test]#dos2unix v3
-使用函数封装-公司自动处理文件备份管理的脚本.txt
[ root@xuegod63 test]
#./ v3-使用函数封装-公司自动处理文件备份管理的脚本.txt
===========================
File Management System
A shell to copy, delete & backup files or directories on Linux
Author: xuegod
===========================
USER: root HOST: xuegod63.cn DATE: 2015-03-21
1 Copy
2. Delete
3. Backup
4. Quit
Please choose a function
(Press the number before the option
,then press reutrn) :
弹出以上消息,显示这是一个文件系统管理,系统所具功能,作者信息,当前使用用户信息,主机名时间,然后是Copy,Delete,Backup,Quit,选择选项输入行号,输入1回车,显示当前正在拷贝,请输入要拷贝文件名或者全路径信息,查看备份信息,如
====================
Copy Files or Directories
====================
Please enter a valid file or directory FULL path: /etc/passwd
[Success] checked File
[Success] checked Permission Read
===================
Please enter a target FULL path:
这里通过ehco -e对Success做了语法的加亮提示,表示文件存在并且有权限,接下来输入要拷贝到的目标路径,然后提示拷贝成功,按下任意键回车清屏继续,如,
===========================
Please enter a target FULL path: /opt
[Success] checked target Directory
[ Success] checked Permission Read
[Success ] checked Permission Write
[Success] Copyed the File
Press any key to continue:
清屏后返回菜单界面继续输入2,删除/opt下面的passwd,删除时会显示输入Y,确认是否要删除,小写也可以,如,
====================
Delete Files or Directories
====================
Please enter a valid file or directory FULL path: /opt
[Success] checked Directory
[Success ] checked Permission Read
[Success] checked Permission Write
========================
total 12
drwxr-xr-x. 2 root root 4096 Mar 21 21:15.
dr-xr-xr-x. 27 root root 4096 Feb 10 21:21..
- rw-r- -r- -1 root root 1805 Mar 21 21:15 passwd
=======================
Please press Y to ensure, or press any key to cancel: y
[Sucess] Removed the Directory
备份也同理,这时按下4退出,会显示是否确认退出,输入任意键就会返回,输入y则退出,如,
====================
Please choose a function
(Press the number before the option
,then press reutrn) :4
====================
Please type y to confirm exit the shell
:y
[ root@xuegod63 test]#
3、v2,v3脚本内容
1、v2函数的实现,脚本中首先定义了一个源,两个目标路径,定义完后会弹很多消息,这些消息可以通过变量的方式获取,赋值完后直接引用就行,像报错信息,目标路径,源文件系统等,然后需要做一些封装,输入函数后判断源路径是否存在,如果不存在则报错,然后定义每个函数的功能,比如copy的后期调用,delete删除,backup备份,使用case进行选择获取输入的选项,如果输入是1只需要调用函数即可,read输出信息后执行clear进行清除
v2-使用函数封装-公司自动处理文件备份管理的脚本.txt:
#!/bin/bash
srcPath= "
dstPath=""
ErrMsg="Yout enter the directory orfile dose not exist. "
DstDirMsg="Please input destination dircetory"
SrcFilesMsg= "Please input source dircetory or file."
DstFlesMsg="Delete the file or dircetory. "
DirFileMsg=””
function inputSourcePath(){
while true
do
2、v3脚本的实现比v2版本更复杂,将一系列颜色赋值给变量,echo -e或者-e可搜索到函数的具体调用,如,
#show system info
TIME=$(date +%Y-%m-%d)
echo “USER: $USER HOST:$HOSTNAME DATE:$TIME”
# base functions
# file or directory
function isFile0rDir() {
if test -d $1; then
echo -e "[${green}Success${nc}] checked Directory"
return 1
elif test -f $1; then
echo -e "[${green}Success${nc}] checked File "
return 0
else
echo -e "[${red}Failed${nc}] No such file or directory"
read – p "Press any key to retry:" Any
当echo输出Success时,在前后加上{green},{nc}可以对颜色做出区别,在echo输出时可以通过读取环境变量和hosename来判断当前用户是root,执行case判断时既要y又要Y则可表达为y|Y的方式。