我已经在一个bash脚本中编写了then、elif和else语句。我知道它可以工作,因为我可以在终端界面中运行相同的命令,并看到它正在执行我想要的操作。但是当我在脚本中运行它时,似乎总是跳转到else语句,并且没有检测到任何东西。有人能帮忙解释一下这是为什么吗?这是我的脚本代码:
if [ -e "$1" ]
then
for line in `samtools view -H $1`
do
if [[ "$line" == *NCBI-Build-36\.1* ]]
then
echo "hg18"
break
elif [[ "$line" == *hg19* ]]
then
echo "hg19"
break
else
echo "Reference was not found, manual entry required: "
read ans
echo "$ans"
break
fi
done
else
echo -e "Usage: \e[1;32mreadRef.sh \e[1;36mbamfile.bam"
fi
无论我插入什么文件,它总是跳到else分支并要求我手动输入。以下是我在终端上运行的命令:
for line in `samtools view -H $bignormal`; do if [[ "$line" == *NCBI-Build-36\.1* ]]; then echo "YES - $line"; else echo "NO - $line"; fi; done
输出结果如下:
NO - @HD
NO - VN:1.0
NO - GO:none
NO - SO:coordinate
NO - @SQ
NO - SN:1
NO - LN:247249719
YES - AS:NCBI-Build-36.1
YES - UR:http://www.bcgsc.ca/downloads/genomes/9606/NCBI-Build-36.1/bwa_ind/genome/
NO - SP:Homo
NO - sapiens
.
.
.
脚本为什么无法检测到我要查找的字符串,但在终端中却可以检测到?
编辑: 我尝试了Charles所说的方法,这是输出结果:
:+'[' -e /projects/rcorbettprj2/DLBCL/CNV/RG065/normal/A01440_8_lanes_dupsFlagged.bam ']'
::+samtools view -H /projects/rcorbettprj2/DLBCL/CNV/RG065/normal/A01440_8_lanes_dupsFlagged.bam
:+for line in '`samtools view -H $1`'
:+case "$line" in
:+echo 'Reference was not found, manual entry required: '
Reference was not found, manual entry required:
:+read ans
PS4=:${BASH_LINENO}+ bash -x yourscript
命令来查看执行过程中实际发生的情况。 - Charles Duffy