我开始编写脚本,我正在尝试用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
我该如何解决这个问题?
答案 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