我创建了这个有一个参数(文件名)的小 Bash 脚本,该脚本应该根据文件的扩展名做出响应:
#!/bin/bash
fileFormat=${1}
if [[ ${fileFormat} =~ [Ff][Aa]?[Ss]?[Tt]?[Qq]\.?[[:alnum:]]+$ ]]; then
echo "its a FASTQ file";
elif [[ ${fileFormat} =~ [Ss][Aa][Mm] ]]; then
echo "its a SAM file";
else
echo "its not fasta nor sam";
fi
它是这样运行的:
sh script.sh filename.sam
如果它是一个 fastq(或 FASTQ,或 fq,或 FQ,或 fastq.gz(压缩)),我希望脚本告诉我“这是一个 fastq”。如果是 sam,我想让它告诉我它是 sam,如果不是,我想告诉我它既不是 sam 也不是 fastq。
问题:当我没有考虑 .gz(压缩)场景时,脚本运行良好并给出了我预期的结果,但是当我尝试添加最后一部分以解决这种情况时发生了一些事情(见第三行,它说的部分 .?[[:alnum:]]+ )。这部分的意思是“在文件名中,在扩展名之后(在这种情况下为 fastq),后面可能有一个点加上一些单词”。
我的输入是这样的:
sh script.sh filename.fastq.gz
它有效。但是如果我输入: sh script.sh filename.fastq
它说它不是fastq。我想把最后一部分作为可选的,但如果我添加一个“?” 最后它不起作用。有什么想法吗?谢谢!我的问题是修复该部分以适用于这两种情况。