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

举报
yd_280822929 发表于 2026/10/29 14:02:52 2026/10/29
【摘要】 本人也是接触linux很久了。但是对系统的架构也是一知半解,平时的使用情况也就是一键安装lnmp,顶多装redis,自己一直都专注于web开发,很少去接触系统运维方面的知识。一直觉得linux是一个很高大上的系统,一出错我根本无从下手。只能把错误丢给百度,或者google。我花了近一周时间去学习shell,总结起来shell脚本是一个命令行解析器,帮助用户和操作系统打交道。也遇到很多...
    本人也是接触linux很久了。但是对系统的架构也是一知半解,平时的使用情况也就是一键安装lnmp,顶多装redis,自己一直都专注于web开发,很少去接触系统运维方面的知识。一直觉得linux是一个很高大上的系统,一出错我根本无从下手。只能把错误丢给百度,或者google。我花了近一周时间去学习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的解压器。
如果有我写的不合理的地方,欢迎大神指教!
【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0)

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。