在Bash中编写多个脚本的脚本

时间:2016-07-07 15:50:29

标签: bash

我有一个类似的脚本:

for k in {1..100..1}
do
cat << EOF > script${k}.sh

  do some things

  cat << EOF > somefile
  text
  EOF

  do some things


EOF
done

所以,简而言之,我想要100个看起来像这样的脚本:

do some things

  cat << EOF > somefile
  text
  EOF

  do some things

问题在于,当我运行它时,Bash将第一个EOF与第三个EOF关联起来并停止写入并开始尝试运行下一个命令。

我该如何解决这个问题?

提前致谢!

编辑:我纠正了下面亚伦指出的错字。另外,我将扩展我原来的问题。按照Aaron的指示,我使用END作为第一个和最后一个EOF。它工作正常,但我仍然有一些麻烦。更具体,我的代码如下所示:

for k in {1..100..1}
do
cat << END > script${k}.sh

  mkdir folder${k}
  cd folder${k}

  cat << EOF > somefile
  text
  EOF

  for j in {1..80..1}
    cat << EOF > program${j}
       text
    EOF

执行一些东西

END
done

我猜你看到了麻烦。现在代码工作得很好。问题在于变量。 script${k}中END之间的$ {k}未被相应的数字替换!

感谢所有帮助: - )

1 个答案:

答案 0 :(得分:2)

EOF可以是在heredoc末尾找到的任何令牌,因此您可以在外部heredoc上使用另一个令牌:

for k in {1..100..1}
do
cat << END > script${1}.sh
do some things

cat << EOF > somefile
text
EOF

do some things

END
done

一些补充说明:

  • 你没有使用$k,所以你基本上会覆盖同一个文件100次。您的意思是script${k}.sh而不是script${1}.sh

  • 创建相同脚本的100个版本似乎毫无用处,即使脚本的行为取决于其名称。难道你不能将参数传递给一个独特的脚本吗?