浅谈Linux下的脚本运行与压缩文件解压
标题咋一看有点奇怪,脚本运行和压缩文件解压有啥关系,其实确实没啥关系,单纯只是因为笔者最近接触到这两方面的一些东西了,准备写一写来记录一下。但是又懒得开两个文章了,所以干脆把没啥联系的两个东西放一个地方写了。
Linux脚本运行
Linux下说的脚本,一般是指以.sh
结尾的Shell脚本。我没有接触过啥Shell编程,据说Shell这能写上千行做业务的,应该表达能力很强。我的个人理解就是一个高级命令行,类似于Python解释器即时解释模式和写.py
文件之后再解释类似。
那就按和Python的对应关系,来简单粗略地看一下Shell的语法。
Shell的语法
变量赋值
有时候需要储存一些信息,那就首先得用到变量。和Python类似,Shell没有所谓的类型,只需要直接赋值即可。不过要注意变量名和等号之间不能有空格!
1 | image_path="/root/data/image_path" |
但使用的时候需要额外用$符号标记一下:
1 | echo $image_path |
拼接字符串
拼接字符串也是非常重要的一个技能,毕竟有时候还是希望输出更可读一点的:
1 | cd $image_path |
获取参数
命令行非常关键的一个话题就是获取参数,使用$0
,
$1
这样的方式获取参数,$0
代表的使执行的文件名,包含执行路径。这点和Python的argv
非常相似。
遍历文件
可以结合ls和for...in...循环语句来做:
1 | for image_file in $(ls ${image_path});do |
if else
这个地方有点新奇,因为它if的结束语句是fi:
1 | if [ condition ] |
这里也要注意中括号和condition不要粘在一起了,不然会有问题。do的结束语句是done很好理解,那为啥if的结束语句是fi呢?
因为fi是if反过来写的,这就是结束了,还比较雷。一开始看到了没怎么琢磨明白fi是啥意思。
输入输出重定向
一般用得比较多的就是输出重定向和输入重定向:
1 | # 输出重定向 |
语法大概就写这么多吧,肯定非常不完整,但是对我来说,能大致看懂别人写的脚本是啥意思就行了。
Chmod赋予可执行权限
有的时候Copy了别人的脚本,然后啥后缀名都是对的,结果死活执行不了。
这里涉及到Linux的一个权限机制,它不是说写入了一个文本就能执行的,要执行必须给它赋予“可执行”的权限才能执行。
要让脚本可执行,可以对脚本赋予可执行权限:
1 | # 先赋予可执行权限,即-x参数 |
这样脚本就顺利跑起来了。
Linux解压压缩文件
tar命令
基本用这个命令就够了,这个命令实际上不是压缩,只是打包而已,不会做任何压缩大小的事。但是,能有比较好压缩比的是文本,但文本又不咋占地方;图像占地方,但是它本身就是高度压缩了,再压缩收益很小,而且要压缩解压还废计算资源。因此很多时候我需要的实际上是打包,把一堆文件或文件夹聚合在一块。
下面是tar的几个核心功能
1 | # 打包文件 |
zip命令
zip是会压缩的,打包一大堆文本的时候可以有比较显著的空间优势。
1 | # 压缩文件 |
嗯,这些应该就够用了。突然没有图形界面要靠命令行做这些确实有点不习惯,但好处就是可以自动化呀。很多复杂的操作可以写成脚本,后面就不那么麻烦了,应该是能提升效率的。