linux系统实例快速上手shell脚本
Posted 码农有道
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了linux系统实例快速上手shell脚本相关的知识,希望对你有一定的参考价值。
阅读大概需要8分钟
昨天老师给了宗林师兄任务,让我跑一个机器翻译的程序。我看了看就是跑shell脚本。刚开始一看。。我的天。。好长的代码,但是觉得这个时候就更不能怕,得迎难而上,趁这个机会,把shell脚本好好弄弄,以后也好用呀!好吧,下面让我们一个一个来。
初始化路径
这个最好都在开头写上,意思是之后的任何语句执行只要有一个返回的不是true就退出。这样的好处就是保证自己的代码在运行完完全是自己想要的,而不是运行了几天发现竟然是有问题的代码。真的是这样就惨了。所以,开头一定写上这个。如果要增加可读性,也可以用set -o errexit 字面意思就是出现error就exit。跟set -e是一样一样的。
这里大概分为四小部分:
分别为:BASH_SOURCE,cd,dirname,pwd
BASH_SOURCE:我们先看里面的,这个是当前脚本的文件的路径。但是前提你得先将次脚本文件加上可执行权限,即 chmod +x [当前文件名]。然后,就能用这个命令了。BASH_SOURCE[0]存放的路径数据。
dirname:取出后面命令的路径部分
cd 这个就很简单了,进入dirname取出该脚本的路径的上一层(因为后面有一个/..,所以是上一层)
pwd:这个是获得当前路径。
&&:这个的意思就是前面的执行完了才执行后面的。
这句话总的意思就是,获取该脚本的上一级的路径。
你看看,一句话学习了这么多命令,是不是很开心O.O
下一句话:
这个主要就是${1:xxx}是知道什么意思。我先说说$0,$1,$2等,这里的$0表示这个这个脚本本身,$1,$2分别表示第一个参数,第二个参数。那么我们来看这个命令。这个意思就是说:先判断第一个位置是不是有传入的参数,有的话OUTPUT_DIR就是第一个参数,如果没有的话那就后面的xxx,这里就是OUTPUT_DIR="wmt16_de_en"。
这两句应该不用解释了。设置OUTPUT_DIR的值和一个echo的输出。
下载数据
第一句话
这里说说mkdir吧。
mkdir:建立一个目录。mkdir myfile 就生成一个myfile目录在当前目录里。这里的-p选项,是一次可以建立多个路径的意思。举个例子:
mkdir ./dir1/dir2/dir3 如果此时没有dir1那么之后的都建立不了,如果用
mkdir -p ./dir1/dir2/dir3 就可以啦。没有的都会自己创建。
下一句
这里我们主要看curl就好了。curl是网络请求命令。如果想比如保存整个网页呀,下载数据呀,都可以的。curl的下载形式为:
如果想详细了解curl命令,可以看
shell中的curl网络请求
https://blog.csdn.net/u012390519/article/details/74231606
因为我们经常用的就是curl -o [保存路径] [网络链接]
所以,基本记住这个命令就差不多啦。
解压
这里的主要命令就是解压tar了。
先来说说tar的参数吧。
-c :建立一个压缩文件的参数指令(create 的意思);
-x :解开一个压缩文件的参数指令!
-t :查看 tarfile 里面的文件!
特别注意,在参数的下达中, c/x/t 仅能存在一个!不可同时存在!
因为不可能同时压缩与解压缩。
-z :是否同时具有 gzip 的属性?亦即是否需要用 gzip 压缩?
-j :是否同时具有 bzip2 的属性?亦即是否需要用 bzip2 压缩?
-v :压缩的过程中显示文件!这个常用,但不建议用在背景执行过程!
-f :使用档名,请留意,在 f 之后要立即接档名喔!不要再加参数!
例如使用『 tar -zcvfP tfile sfile』就是错误的写法,要写成
『 tar -zcvPf tfile sfile』才对。
-p :使用原文件的原来属性(属性不会依据使用者而变)
-P :可以使用绝对路径来压缩!
-N :比后面接的日期(yyyy/mm/dd)还要新的才会被打包进新建的文件中!
--exclude FILE:在压缩的过程中,不要将 FILE 打包!
该参数来自于
【shell】tar命令详解
http://blog.sina.com.cn/s/blog_66f483af01018ab3.html
因为我们常用的命令就是
解压 tar -xvzf [解压的文件] -C [输出文件的名字]
打包 tar -zcvf [打包的文件] -C [输出文件的名字]
-C [文件名字]可以不写,用默认文件名。
常用shell语句
这里主要就是if了。
一、条件测试的表达式:
[ expression ] 括号两端必须要有空格
[[ expression ]] 括号两端必须要有空格
test expression
组合测试条件:
-a: and
-o: or
!: 非
二、整数比较:
-eq 测试两个整数是否相等
-ne 测试两个整数是否不等
-gt 测试一个数是否大于另一个数
-lt 测试一个数是否小于另一个数
-ge 大于或等于
-le 小于或等于
三、命令间的逻辑关系
逻辑与:&&
第一个条件为假 第二个条件不用在判断,最总结果已经有
第一个条件为真,第二个条件必须得判断
逻辑或:||
四、字符串比较
== 等于 两边要有空格
!= 不等
> 大于
< 小于
五、文件测试
-z string 测试指定字符是否为空,空着真,非空为假
-n string 测试指定字符串是否为不空,空为假 非空为真
-e file 测试文件是否存在
-f file 测试文件是否为普通文件
-d file 测试指定路径是否为目录
-r file 测试文件对当前用户是否可读
-w file 测试文件对当前用户是否可写
-x file 测试文件对当前用户是都可执行
-z 是否为空 为空则为真
-a 是否不空
这里,如果then不写在if后面,if后面就不用分好了;还有,末尾记得fi结尾呀!
好啦。基本的讲完了,给你这篇shell脚本吧。自己尝试看看,理解理解!进步在一点一滴!!加油
https://github.com/DevSinghSachan/Attention_is_All_You_Need/blob/master/tools/wmt16_en_de.sh
推荐阅读:
专注服务器后台技术栈知识总结分享
欢迎关注交流共同进步
码农有道,为您提供通俗易懂的技术文章,让技术变的更简单!
以上是关于linux系统实例快速上手shell脚本的主要内容,如果未能解决你的问题,请参考以下文章
数字IC验证进阶以一个实例,快速上手python脚本处理log的若干关键操作(#python#正则表达式)