红联Linux门户
Linux帮助

shell脚本小工具之万能解压和压缩器---实现思路

发布时间:2016-06-22 09:51:30来源:linux网站作者:我许我向您看齐

本人也是接触linux很久了。但是对系统的架构也是一知半解,平时的使用情况也就是一键安装lnmp,顶多装redis,自己一直都专注于web开发,很少去接触系统运维方面的知识。一直觉得linux是一个很高大上的系统,一出错我根本无从下手。我花了近一周时间去学习shell,总结起来shell脚本是一个命令行解析器,帮助用户和操作系统打交道。也遇到很多坑,if [ $type = 'en' ] 我写个if语句括号和变量一定要用空格隔开,语法特殊,跟其它语言有一定差别,比如case,esac不过学习shell的过程,让我更熟悉了vi编辑器,也发现原来可以这么玩,可以开发很多小工具,提高效率。好了,不多说了。


实现思路:其实很简单,用户选择压缩类型,然后判断是压缩还是解压,还有文件完整名称。shell取出后缀名,根据后缀名判断压缩类型。


贴代码:

#!/bin/bash
#脚本说明
#压缩案例: sh ./ext.sh en /root/a.zip ./test 压缩类型 压缩后的文件名 要压缩的文件或者目录
#解压案例: sh ./ext.sh de ./a.zip 压缩类型 解压的文件名 (默认当前目录)
type=$1 #压缩类型,en表示压缩,de表示解压
filename=$2 #文件名
to_filename=$3 #如果是压缩则是选择压缩的文件,解压则是输出的文件路径
ext="${filename##*.}" #获取到文件名的后缀
if [ ! $filename ]
then
#没有传入参数
echo 'error(100)not file(tar|gz|bz2|zip|rar)'
exit 0
fi
if [ $type = 'en' ]
then
#压缩至
#匹配相应的文件
case $ext in
'tar')
eval "tar cvf $filename $to_filename"
;;
'gz')
eval "tar zcvf $filename $to_filename"
;;
'bz2')
eval "tar jcvf $filename $to_filename"
;;
'zip')
eval "zip $filename $to_filename"
;;
*)
#不支持该类型
echo 'error(101)This type is not supported(tar|gz|bz2|zip)'
;;
esac
else
#解压至
#匹配相应的文件
case $ext in
'tar')
eval "tar xvf $filename"
;;
'gz')
eval "tar zxvf $filename"
;;
'bz2')
eval "tar jxvf $filename"
;;
'zip')
eval "unzip $filename"
;;
*)
#不支持该类型
echo 'error(101)This type is not supported(tar|gz|bz2|zip)'
;;
esac
fi


PS:我只写了四种解压方式,不过你要多少就可以加多少,在case里面加入即可。这种解压器自己用用就好,因为会考虑到有些系统没有安装相应的解压软件。就会报命令语法错误的warning,比如你要解压rar,系统就得装rar的解压器。


如果有我写的不合理的地方,欢迎大神指教!


本文永久更新地址:http://www.linuxdiyf.com/linux/21730.html