对于验证过程,我需要比较两个文件之间的行数。我知道如何做到这一点(代码如下所示)。但是,如果该过程按预期工作,则一个文件将始终多出一行。因此,如果 file1 = file2+1,则过程将成功。如何在 if 命令中添加这个额外的行?
if [ "$(wc -l < file1.txt)" -eq "$(wc -l < file2.txt)" ]; then echo 'Match!'; else echo 'Warning: No Match!'; fi
对于验证过程,我需要比较两个文件之间的行数。我知道如何做到这一点(代码如下所示)。但是,如果该过程按预期工作,则一个文件将始终多出一行。因此,如果 file1 = file2+1,则过程将成功。如何在 if 命令中添加这个额外的行?
if [ "$(wc -l < file1.txt)" -eq "$(wc -l < file2.txt)" ]; then echo 'Match!'; else echo 'Warning: No Match!'; fi
我想为我正在开发的脚本使用两个参数和第三个可选参数。我是使用 bash 的新手,所以我一直在复制并尝试理解以下代码,它可以满足我的需求(我猜)
while [[ $# -gt 0 ]]; do
case $1 in
-f1|-fasta1)
FASTA1=$2
shift
;;
-f1=*|-fasta1=*)
FASTA1=${1#*=}
;;
-d|-directory)
DIRECTORY=$2
shift
;;
-d=*|-directory=*)
DIRECTORY=${1#*=}
;;
-f2|fasta2)
FASTA2=$2
shift
;;
-f2=*|-fasta2=*)
FASTA2=${1#*=}
;;
-*)
echo "Invalid option: $1" >&2
exit 1
;;
--)
# Do FILES+=("${@:2}") maybe
break
;;
*)
# TODO
# Do FILES+=("$1") maybe
;;
esac
shift
done
问题是这段代码有很多部分我真的不明白什么是例如 the -gt
或 the1#*=
或为什么每个参数需要写两次第一行
-f1|-fasta1)
FASTA1=$2
shift
和两个
-f1=*|-fasta1=*)
FASTA1=${1#*=}
有人可以告诉我在哪里可以找到对此的解释。我一直在阅读教程,但使用更简单的示例我无法理解这一点。
我想创建一个脚本,该脚本使用指定为第二个参数的目录中的第一个参数的名称创建一个新文件夹。
#!/bin/bash -e
## Passing Arguments (fastq data and directory where generate the output) into this script
$fastq_file $new_directory
## Create the new directory
mkdir $new_directory/$fastq_file
# I have also tried mkdir "$new_directory"/"$fastq_file"
保存并关闭后
我试图用这个运行脚本
my_script 12345.fastq ./
所需的输出应该是当前目录中名为 12345 的新文件夹
如果用户而my_script 12345.fastq ./
不是my_script 12345.fastq /home/folder1/folder2
我想在目录 /home/folder1/folder2 中获得一个名为 12345 的新文件夹
但是,经过多次参加后,我总是会收到错误消息:mkdir: cannot create directory `/': File exists