总结一下目前用到的shell脚本:
for bb in 1.10 1.20 1.30 1.40 1.50 1.60 1.70; do
# 可以简写为
for bb in $(seq 1.10 0.10 1.70); do
并且可以通过 echo $(seq 1.10 0.10 1.70) 可以得到 1.10 1.20 1.30 1.40 1.50 1.60 1.70
1. 服务器中shell脚本的应用
(1) master服务器上提交任务:
for bb in 1.06 1.10 1.20 1.30 1.40 1.50 1.60 1.70; do
for n in 5000 8000 10000 ; do
cd ~/Ising/gap/
mkdir gap-$n-$bb #新建文件夹
cp a.out gap-$n-$bb #将a.out复制至每一个文件夹
cd gap-$n-$bb
echo $n $bb > 'read.in'
echo '#'!/bin/bash > job # '#'和'>' 单引号指的不具备之前的功能,只是这个符号表示
echo '#'PBS -N gap-$n-$bb >> job
echo '#'PBS -l nodes=1:ppn=1 >> job
echo '#'PBS -q student >> job
echo '#'PBS -o .out1 >> job
echo cd '$'PBS_O_WORKDIR >> job
echo ./a.out '>' output.txt >> job
qsub job
echo gap-$n-$bb #在外面输出,可以看到任务提交到了哪一个
sleep 1
done
done
(2) sbatch服务器上提交任务:
for bb in 1.06 1.10 1.20 1.30 1.40 1.50 1.60 1.70; do
for n in 5000 8000 10000 ; do
cd ~/Ising/gap/
mkdir gap-$n-$bb #新建文件夹
cp a.out gap-$n-$bb #将a.out复制至每一个文件夹
cd gap-$n-$bb
echo $n $bb > 'read.in'
echo '#'!/bin/bash > job # '#'和'>' 单引号指的不具备之前的功能,只是这个符号表示
echo '#'SBATCH -J gap-$n-$bb >> job ## -----------------------
echo '#'SBATCH -p debug >> job ##
echo '#'SBATCH -N 1 >> job ## 两个服务器不同的地方!
echo '#'SBATCH -n 1 >> job ##
echo ./a.out '>' output.txt >> job ##----------------------------
qsub job
echo gap-$n-$bb #在外面输出,可以看到任务提交到了哪一个
sleep 1
done
done
(3) move.sh
目的:将服务器中大量文件夹中的data文件复制到某一个文件夹“move”中,以便画图。
for bb in 1.06 1.10 1.20 1.30 1.40 1.50 1.60 1.70; do
for n in 5000 8000 10000 ; do
cd ~/Ising/gap/ #打开文件夹所在的目录
mkdir move-gap # 新建文件夹(所有data文件放置的地方)
cd gap-$bb-$n #依次打开每个data文件所在的位置
cp lngap-b-$bb-$n.dat ../move-gap #把data文件复制到 新建文件夹中
done
done
2. 电脑上的shell脚本的应用
(1) data.sh
对大量已有的data数据文件做某个相同操作时,可以用shell脚本(不断输入不同的变量bb)来完成。
n=05000
for bb in 1.06 1.10 1.20 1.30 1.40 1.50 1.60; do
echo $bb > 'read.in'
./a.out
done
(2) rfit.sh 取不同区间拟合临界指数
lm=-10.8
for lx in -10.7 -10.6 -10.4 -10.2 -10.0 -9.8 -9.6 -9.4 -9.2 -9.0 -8.8 -8.6 -8.5; do # 不断改变拟合范围 [lm:lx]
lb=1.50
sed -i '1s/.*/lmin='$lm'/' pfeta.gnu
sed -i '2s/.*/lmax='$lx'/' pfeta.gnu
sed -i '3s/.*/bb="'$lb'"/' pfeta.gnu
gnuplot pfeta.gnu
done
另外,需结合 pfeta.gnu 画图文件
lmin=-10.8
lmax=-8.5
bb="1.50"
set ylabel '\large $\ln \Delta $'
set xlabel '\large $\ln (h_w-h_L)$'
f1(x)=a1+b1*x
fit [lmin:lmax][] f1(x) 'gap-b-'.bb.'-08000.dat' u 3:4 via a1,b1 #'mc-'.t.'.dat'
set print 'fit-'.bb.'.dat' append #将不同拟合区间得到的数据输出
# print bb,lmin,lmax,a1,b1
print sprintf("%s %.2f %.14f %.14f ", bb, -lmax, b1, b2 )
set print
set t post enh color font ',25'
rep
set output
se t qt