2016-12-02 122 views
0

我開始編寫腳本,我正在嘗試在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

我不確定你真的想要做什麼,但會有這樣的幫助嗎? '#!bin/bash' '我爲$(<您的序列>)' '做' \t'echo「我的序列:$ i」' 'done' –

回答

1

你需要閱讀更多有關bash brace expansion一點。你可以這樣做:

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

畫下劃線部分爲在括號擴展將得到由shell擴展到
-dec traj-1.dcd -dec traj-2.dcd ... -dec traj-50.dcd

你並不需要與exit明確結束腳本 - 殼在命令用完時將自行退出。

0

>截斷上打開的文件。在循環創建文件之前只使用一次,然後在循環中追加(>>),或者重定向整個循環。

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

...

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