编写一个脚本以按顺序放置一系列文件

时间:2016-12-02 17:59:53

标签: bash

我开始编写脚本,我正在尝试用bash编写脚本。我需要一个脚本来编写一个文件名的序列,在一个文件中编号从1到50。这些是来自MD模拟的轨迹文件。我的想法是写下这样的东西:

for valor in {1..50}
do
echo "
#!/bin/bash
catdcd -o Traj-all.dcd -stride 10 -dcd traj-$valor.dcd" > Traj.bash
exit 

但是,我刚收到一个包含以下行的文件:

#!/bin/bash
catdcd -o Traj-all.dcd -stride 10 -dcd traj-50.dcd
exit

但我真正想要的是:

#!/bin/bash
catdcd -o Traj-all.dcd -stride 10 -dcd traj-1.dcd -dcd traj-2.dcd -dcd traj-3.dcd ... -dcd traj-50.dcd
exit

我该如何解决这个问题?

2 个答案:

答案 0 :(得分:1)

您需要阅读更多关于bash brace expansion的内容。你可以这样做:

{ 
    echo "#!/bin/bash"
    echo "catdcd -o Traj-all.dcd -stride 10" "-dec traj-"{1..50}".dcd"
    #                                        ^^^^^^^^^^^^^^^^^^^^^^^^^
} > Traj.bash

下划线部分是支撑扩展将被外壳扩展为
的位置 -dec traj-1.dcd -dec traj-2.dcd ... -dec traj-50.dcd

您不需要使用exit显式结束脚本 - 当命令用完时,shell将自行退出。

答案 1 :(得分:0)

>在打开时截断文件。要么只在循环之前使用一次来创建文件,然后在循环中追加(>>),要么重定向整个循环。

> foo
for ...
do ...
  echo ... >> foo
done

...

{
  for ...
  do ...
    echo ...
  done
} > foo