美文网首页生物信息数据科学
74.《Bioinformatics Data Skills》之

74.《Bioinformatics Data Skills》之

作者: DataScience | 来源:发表于2021-10-18 20:33 被阅读0次

bash中条件语句的基本格式为:

if [条件命令]
then
    [if块]
else
    [else块]
fi

条件命令可以为程序,pipeline或test语句,唯有0退出码为真,其它值皆为假。if判断为真则执行“if块”,否则执行“else块”(else块非必需)。then可以和"if块"写作一行(需要";"隔开,即if[commands]; then)。

程序作为条件

可以使用程序作为条件命令,例如grep能够匹配内容的话会其返回退出码0,判断文件是否存在"pattern":

if grep "pattern" some_file.txt > /dev/null
then 
    echo "pattern" found in some_file.txt
fi

注:这里通过>/dev/null重定向避免在屏幕打印返回值。

可以使用逻辑符号&&(与),||(或),!(非)追加判断,例如判断是否两个文件都有“pattern”:

if grep "pattern" some_file.txt > /dev/null && grep "pattern" some_file2.txt > /dev/null
then 
    echo "pattern" found in some_file.txt and some_file2.txt
fi

判断文件是否不包含“pattern”:

if ! grep "pattern" some_file.txt > /dev/null 
then 
    echo did not find "pattern" in some_file.txt 
fi

test语句作为条件

test命令接条件表达式,返回代表真假的退出码:

$ test "ABC" = "ABC"; echo $?
0
$ test "ABC" = "abc"; echo $?
1
$ test 3 -gt 1; echo $?
0
$ test 3 -le 1; echo $?
1

注:通过; echo $? 可以输出最近运行程序退出码。

以上代码展示字符与数字之间的比较,具有含义见下表。

表1

然而脚本中更常用的操作是对文件与路径的属性判断,因此test语句自带用于文件判断的参数(详细用法见下表):

# 判断文件夹是否存在
$ test -d some_dirictory
# 判断文件是否存在
$ test -f some_file.txt
# 判断文件是否可读
$ test -r some_file.txt
# 判断文件是否可写
$ test -w some_file.txt
表2

if组合test语句格式:

if test -f some_file.txt
then 
    [...]
fi

可以简略的写作:

if [ -f some_file.txt ]
then
    [...]
fi

注:这里[]需要空格隔开内容。

值得注意的是,test语句时追加判断采用参数-a(AND)与-o(OR)而非&&||,以判断输入的合法性代码作为例子说明:

#!/bin/bash
set -euo pipefail

if [ "$#" -ne 1 -o ! -r $1 ]
then
    echo "使用方法:script.sh input.txt"
    exit 1
fi

这里确定是否参数只有一个且为可读的文件。

相关文章

网友评论

    本文标题:74.《Bioinformatics Data Skills》之

    本文链接:https://www.haomeiwen.com/subject/gyonoltx.html