BASH - 基于变量创建和填充目录

时间:2015-12-15 16:42:10

标签: linux bash loops

我正在编写一个BASH脚本,它循环遍历列表文件pt2.lst的内容,运行Perl脚本并使用基于pt2.lst内容的文件名保存输出。以下代码有效:

while read p; do
        perl Collect_Vaf.pl $1 $p > "$p_vaf.lst"
done < pt2.lst

...但仅仅因为Perl脚本使用第二个命令行参数来命名它打印到的文件。将上面的脚本运行为&#34; perl Collect_Vaf.pl $ 1 $ p&#34;也适用于这种情况。

我希望创建一个名称基于pt2.lst内容的新目录,而不是将文件保存在运行脚本的同一目录中。我认为这样可行:

while read p; do
        STR = "Sample_$p"
        mkdir $STR
        perl Collect_Vaf.pl $1 $p > "$STR/$p_vaf.lst"
done < pt2.lst

但是这为循环的每次迭代提供了以下三条错误消息:

Vaf_Plotter.sh: line 11: STR: command not found
usage: mkdir [-pv] [-m mode] directory ...
Vaf_Plotter.sh: line 13: /.lst: Permission denied

如何根据变量创建目录,然后将文件保存到循环内的所有目录中?

以下是可能相关或不相关的详细信息列表:

  1. 使用bash脚本生成文件pt2.lst。每行包含4-5位数字
  2. 我打算通过在循环中运行多个脚本,将几个文件保存到每个新创建的目录中;为简单起见,我只包括一个
  3. BASH脚本使用一个必需参数$ 1运行,该参数用作许多脚本命令的输入文件

1 个答案:

答案 0 :(得分:3)

删除赋值运算符周围的空格。也就是说,而不是:

STR = "Sample_$p"

你必须这样写:

STR="Sample_$p"

另一个问题是:

perl Collect_Vaf.pl $1 $p > "$STR/$p_vaf.lst"

应该是:

perl Collect_Vaf.pl $1 $p > "$STR/${p}_vaf.lst"

因为根据您的错误消息,没有名为$p_vaf的变量。这也意味着,当你将第一个例子描述为“它有效”时,大多数情况下都不是这样。