#ntpdate us.pool.ntp.org
在上一篇【已解决】shell大法好——用here document生成脚本中介绍了如何使用here document自动生成脚本文件,折腾了一番,搞定了新的create_newcase.sh,可以自动生成pbs文件啦,不用每次调核心数调节点调路径啦。话说shell的if语法真是折腾,调试了快半个小时才通过三行if语句。注意各种空格!
核心代码:
97 #Deal with que and nodes 98 NNODES=$[NTASKS/16] 99 100 if [ $QUENAME = "ys" ]; then 101 WALLTIME=999 102 elif [ $QUENAME = "few" ]; then 103 WALLTIME=720 104 elif [ $QUENAME = "medium" ]; then 105 WALLTIME=168 106 else 107 WALLTIME=48 108 fi 109 110 #-------------------------------------- 111 #------Now generate the pbs file------- 112 #-------------------------------------- 113 cat << EOF > run.pbs 114 #!/bin/sh 115 #PBS -N $CASENAME 116 #PBS -q $QUENAME 117 #PBS -l walltime=$WALLTIME:00:00 118 #PBS -l nodes=$NNODES:ppn=16 119 #PBS -r n 120 #PBS -o cesmrun.log 121 #PBS -e cesmrun.err 122 echo "This jobs is "\$PBS_JOBID@\$PBS_QUEUE 123 MPIBIN=/public/mpi/mvapich2-18-intel/bin 124 EXEROOT=/users/yangsong3/L_Zealot/F/$CASENAME/exe 125 cd \$EXEROOT 126 \$MPIBIN/mpirun -np $NTASKS -hostfile \$PBS_NODEFILE ./cesm.exe >& ../run.log 127 EOF
CESM从新建一个case,更改pe layers,到最后提交run脚本执行,还是需要折腾一番的,尤其是四期动辄就对csh傻眼(貌似最近好了),还是提交标准的bash pbs妥当,不过更改pbs,又要费一番功夫。最好就是在create newcase的时候直接把bps生成好,change pe layers的脚本里也加入对pbs修改的语句,这样就可以省下很多功夫。按照【shell 生成文本】的关键词查了下资料。发现here document可以解决问题。
例如下面的here.sh 文件cat << EOF > output.shecho "hello"echo "world"EOF使用 sh here.sh 运行这个脚本文件,会得到output.sh 这个新文件,里面的内容如下echo "hello"echo "world"