本人也是接触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的解压器。 如果有我写的不合理的地方,欢迎大神指教!