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

73.《Bioinformatics Data Skills》之

作者: DataScience | 来源:发表于2021-10-12 21:46 被阅读0次

变量

编写脚本难免用到各种变量,可以主动声明或者通过命令行参数获取,bash中变量没有数据类型(可以看作是字符串)。在脚本开头声明关键的变量名有助于后期调整与重用(例如输出结果地址),变量声明方式为:

$ result_dir="results/"

注意:“=”号前后没有空格。

$变量名可以获取变量值:

$ echo $result_dir
results/

如此获取存在一个缺陷,不知道变量的结束与下一个字符串的开始位置,举例说明:

$ sample="test"
$ mkdir $sample_aln

这里我们本想创建test_aln的文件夹,然而程序明显无法判断变量名结束位置,错误将sample_aln当作变量名报错,通过增加花括号解决这个问题:

mkdir ${sample}_aln

当前目录将出现test_aln文件夹,更鲁棒的写法是增加引号避免特殊符号带来影响:

$ mkdir "${sample}_aln"

命令行参数

命令行给定的参数可通过$1, $2, $3, ...按位置获取,而$0代表脚本文件名,创建如下脚本测试:

#!/bin/bash
echo "script name: $0"
echo "first arg: $1"
echo "second arg: $2"
echo "third arg:$3"

运行结果:

$ args.sh arg1 arg2 arg3
script name: ./args.sh
first arg: arg1
second arg: arg2
third arg:arg3

$#变量将存储参数数目,可以以此确认用户输入参数数目,脚本改写为以下内容:

if [ "$#" -lt 3 ]
then
        echo "error: too few arguments, you provided $#, 3 required"
        echo "usage: script.sh arg1 arg2 arg3"
        exit 1
fi

echo "script name: $0"
echo "first arg: $1"
echo "second arg: $2"
echo "third arg:$3"

这里if语句下一节详细介绍,它判断条件是参数数目是否小于3。若遵循上节内容在脚本头部设置了set -e,当传入少于3个参数时会返回非0状态码中断程序:

$ ./args.sh someone
error: too few arguments, you provided 1, 3 required
usage: script.sh arg1 arg2 arg3

最后补充一点,脚本是在独立的shell进程中运行的,运行结束后变量名不会保留。

相关文章

网友评论

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

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