linux shell生物信息数据科学

72. 《Bioinformatics Data Skills》

2021-10-11  本文已影响0人  DataScience

学习生物信息的过程中难免需要编写繁复的pipeline,而bash脚本对构建pipeline帮助很大,它可以像胶水一样将流程粘合起来,而我们只需要掌握一些基本的命令(例如管道,重定向,后台运行等),加上一些输入输出的合法性判断就可以了。

编写鲁棒的头部

bash脚本换照惯例使用".sh"后缀,创建脚本文件后,可以将以下的几行内容放置在脚本的开头部分:

图1

解释:

  1. 此行叫做shebang,它的作用是告诉计算机该脚本的内容调用哪个程序来执行,这样在执行的时候可以直接像程序一样调用,这一行技术上不是必要的,但是加上是一个好习惯。

  2. 脚本运行出错的话,默认不会中止程序而是继续运行下一行,这显然不是我们想要的特性。通过设置这个参数可以确保程序出错(返回非0的状态码)会及时中止。值得注意的是,bash自己能够判断出“错误“与”false“的区别,例如if语句返回的非0状态码并不会导致程序中断。

  3. 默认情况下,bash引用未命名的变量并不会报错,可能导致严重后果。比如说:rm -rf $NOSET/*NOSET变量由于之前未声明被解析为空,命令就变为rm -rf /*(如下):

    $ echo "rm -rf $NOSET/*"
    rm -rf /*
    
  4. set -e参数确保程序返回非零状态码时脚本会异常退出,但是存在一个漏洞,那就是如果我们使用了管道命令,管道只返回最后一个程序的状态码,中间程序出错不会终止程序。这明显也不是我们想要的,因此需要设置这个参数。

这3个参数可以放在一起使用,写作set -euo pipefail

运行bash文件

bash脚本存在两种运行方式,其一是直接调用bash 脚本;其二是在添加shebang的情况下,chmod +x 脚本给予运行权限,再调用./脚本执行。两者技术上没有任何区别,不过后者更加通用,适用于其它语言编写的脚本(更换shebang即可)。编写鲁棒的bash脚本有很多需要学习的地方,之后章节会详细介绍。

上一篇下一篇

猜你喜欢

热点阅读