没有这样的文件或目录 - 但无论如何它都会找到路径

没有这样的文件或目录 - 但无论如何它都会找到路径

嗨,我对 Bash 脚本还很陌生。我正在尝试为纳米孔组装制作一个管道。我想要一个管道,在其中我可以设置多个输入路径和输出 ID。我终于找到了一种方法来将这些变量设置为它们正在工作的状态,并且脚本会说明如果这些变量未设置 = 这正是我想要的。

问题是,尽管它确实找到了路径和文件,但我现在收到了一些错误消息。

以下是一些令人困扰的脚本部分,我在其中设置了四个变量:

if [$1 = ]; then
    echo "Mangler directory til Nanopore filer(er)"
    exit 0
fi

if [$2 = ]; then
    echo "Ingen output filnavn angivet"
    exit 0
fi

if [$3 = ]; then
    echo "mangler Illumina forward fil"
    exit 0
fi

if [$4 = ]; then
    echo "mangler Illumina reverse fil"
    exit 0
fi

PATH=${1}
PREFIX=${2}
il1=${3}
il2=${4}
d=$(printf "%(%d-%m-%Y)T")


#Porechop

echo PORECHOP TRIMMER NANOPORE READS

$'/home/kma/miniconda3/envs/pomoxis/bin/porechop' -i $PATH --threads 4 --check_reads 100 --discard_middle -o /media/kma/new/porechop/"$PREFIX"_"$d"_trimmed.fastq

wait $pid
echo Porechop $pid finished. 

这是我在执行任务之前得到的输出:

/home/kma/Nanopore_pipeline.sh: line 10: [/media/kma/new/Nanopore: No such file or directory
/home/kma/Nanopore_pipeline.sh: line 15: [Bfrag_THS: command not found
/home/kma/Nanopore_pipeline.sh: line 20: [/media/kma/new/Illumina/SRR8549466_1.fastq: No such file or directory
/home/kma/Nanopore_pipeline.sh: line 25: [/media/kma/new/Illumina/SRR8549466_2.fastq: No such file or directory

我希望有人能帮助我解决这个问题:-) - Sabine

答案1

[您犯了一个常见错误: 之后(以及 之前])应该有一个空格。这些是关键字 [是命令及其]强制参数(正如 Kamil Maciorowski 指出的那样),就像您不能写 一样echo1,您也不能写[$1。此外,是一个二元运算符,因此您需要在它的每一侧都有一个表达式。显然,您想检查从到 的=每个参数是否为空。然后,这样写$1$4

if [ "$1" = "" ]; then

对于每个变量。我还用双引号括住了你的变量,这通常非常重要(你可以查看原因)。

现在,如果您尝试if [ $1 = ]不为脚本提供任何参数,$1则将为空,并且执行将以“Mangler directory til Nanopore filer(er)”终止。因此,您可能会认为脚本没有问题,但事实并非如此。实际发生的情况是,表达式变为,并且由于测试中if [ = ]有一个非空字符串,因此它成功了。=


一些建议:

您可以验证所提供的参数的数量,$#而不是检查每个参数是否为空。

外壳检查是一个调试脚本的有用工具,试试看吧!

相关内容