我的输入有三个文件(param.in,pl.in,tp.in),我运行了一个程序(在fortran77中,名为swift_mvs),我的输出有三个文件(dump_param.dat, dump_pl.dat和dump_tp.dat)。我想运行该程序144次(12个月x 12年),每次运行以保存3个输入文件,3个输出文件(保存在:home /.../ 1st Year / 1st Month等)并使用每次运行的输出作为新输入。我已经手动完成此操作,两到两个星期后,我意识到自己犯了一个错误,因此必须从头开始。我编写了这个脚本:
#! /bin/bash
for j in {1,12} # loop for the 12 years
do
for i in {1,11} # loop for the 12 month
do
./swift_mvs
cp dump_param.dat ""$j"ος Χρόνος"/""$i"ος Μήνας"/param"$i"Mon.dat
nano dump_param.dat
cp dump_param.dat param.in
cp dump_param.dat ""$j"ος Χρόνος"/""$((i+1))"ος Μήνας"/param"$((i+1))"Mon.in
cp dump_pl.dat ""$j"ος Χρόνος"/""$i"ος Μήνας"/pl"$i"Mon.dat
cp dump_pl.dat pl.in
cp dump_pl.dat ""$j"ος Χρόνος"/""$((i+1))"ος Μήνας"/pl"$((i+1))"Mon.in
cp dump_tp.dat ""$j"ος Χρόνος"/""$i"ος Μήνας"/tp"$i"Mon.dat
cp dump_tp.dat tp.in
cp dump_tp.dat ""$j"ος Χρόνος"/""$((i+1))"ος Μήνας"/tp"$((i+1))"Mon.in
done
./swift_mvs
cp dump_param.dat ""$(j)"ος Χρόνος"/'12ος Μήνας'/param12Mon.dat
cp dump_pl.dat ""$j"ος Χρόνος"/'12ος Μήνας'/pl12Mon.dat
cp dump_tp.dat ""$j"ος Χρόνος"/'12ος Μήνας'/tp12Mon.dat
nano dump_param.dat
cp dump_param.dat param.in
if [ j -lt 12 ]
then
cp dump_param.dat ""$((j+1))"ος Χρόνος"/'1ος Μήνας'/param1Mon.in
cp dump_pl.dat pl.in
cp dump_pl.dat ""$((j+1))"ος Χρόνος"/'1ος Μήνας'/pl1Mon.in
cp dump_tp.dat tp.in
cp dump_tp.dat ""$((j+1))"ος Χρόνος"/'1ος Μήνας'/tp1Mon.in
fi
done
对于i = 1,2,一切都很好,但是当i = 3时,程序不对数据进行cp处理,则文件保持为空。我在{3,11}中为i尝试查看会发生什么,并且在i = 4之后,文件再次保持为空。认为是我没有收到错误消息。任何帮助将是有用的。预先谢谢你。
答案 0 :(得分:0)
最重要的是,j需要{1..12}。不是{1,12}。 (它是点号“ ..”;不是逗号。)
类似地,我也是。如果需要144,则需要{1..12}。
因为您可以尝试以下操作,但在那里只能获得两个值:
$ for j in {1,12}; do echo $j; done
1
12
这应该有助于您进一步调试程序。
此外,您需要在复制之前先创建文件夹。
我建议也改善压痕。但是,我不确定内循环缩进的某些部分是否在发布期间弄乱了;即使它可能正确地存在于您的源文件中。由你决定。