- 73.《Bioinformatics Data Skills》之
- 28.《Bioinformatics-Data-Skills》之
- 18.《Bioinformatics-Data-Skills》之
- 19.《Bioinformatics-Data-Skills》之
- 【shell笔记>生信|专项】生信数据处理技能手札(3):
- Bioinformatics Data Skills
- 17.《Bioinformatics-Data-Skills》之
- 25.《Bioinformatics-Data-Skills》之
- 25.《Bioinformatics-Data-Skills》之
- 23.《Bioinformatics-Data-Skills》之
变量
编写脚本难免用到各种变量,可以主动声明或者通过命令行参数获取,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进程中运行的,运行结束后变量名不会保留。
网友评论