通过实例快速讲解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脚本高级编程程,希望对你有所帮助。 Example 10-23. Using continue N in an actual task: 1 # Albert Reiner gives an example of how to use "continue N": 2 # --------------------------------------------------------- 3 4 # Suppose I have a large number of jobs that need to be run, with 5 #+ any data that is to be treated in files of a given name pattern in a 6 #+ directory. There are several machines that access this directory, and 7 #+ I want to distribute the work over these different boxen. Then I 8 #+ usually nohup something like the following on every box: 9 10 while true 11 do 12 for n in .iso.* 13 do 14 [ "$n" = ".iso.opts" ] && continue 15 beta=${n#.iso.} 16 [ -r .Iso.$beta ] && continue 17 [ -r .lock.$beta ] && sleep 10 && continue 18 lockfile -r0 .lock.$beta || continue 19 echo -n "$beta: " `date` 20 run-isotherm $beta 21 date 22 ls -alF .Iso.$beta 23 [ -r .Iso.$beta ] && rm -f .lock.$beta 24 continue 2 25 done 26 break 27 done 28 29 # The details, in particular the sleep N, are particular to my 30 #+ application, but the general pattern is: 31 32 while true 33 do 34 for job in {pattern} 35 do 36 {job already done or running} && continue 37 {mark job as running, do job, mark job as done} 38 continue 2 39 done 40 break # Or something like `sleep 600' to avoid termination. 41 done 42 43 # This way the script will stop only when there are no more jobs to do 44 #+ (including jobs that were added during runtime). Through the use 45 #+ of appropriate lockfiles it can be run on several machines 46 #+ concurrently without duplication of calculations [which run a couple 47 #+ of hours in my case, so I really want to avoid this]. Also, as search 48 #+ always starts again from the beginning, one can encode priorities in 49 #+ the file names. Of course, one could also do this without `continue 2', 50 #+ but then one would have to actually check whether or not some job 51 #+ was done (so that we should immediately look for the next job) or not 52 #+ (in which case we terminate or sleep for a long time before checking 53 #+ for a new job).
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值