背景
有对气象海洋数据进行后处理并画图的需求,因数据量大且工作重复 ,故使用shell命令。
环境
服务器账号密码登录、nc数据、matlab软件及代码、shell脚本文件
基本语法
1、#!/bin/bash
#! 是一个约定的标记,它告诉系统这个脚本需要什么解释器来执行,即使用哪一种 Shell。
echo 命令用于向窗口输出文本。
2、for循环
for((i=1;i<31;i++));
do
# A code block
done
3、创建文件夹
filepathfinal = "/vol8/home/caoyu/visualcode/forecast/pomout"
mkdir -p $filepathfinal
4、从一个路径复制到另一个路径
sourcepath = ''/vol8/home/caoyu/fvcom/Forecast/cnsforecast''
destpath = ''/vol8/home/caoyu/visualcode/forecast/pomout/ ''
cp -r $sourcepath/* $destpath
5、日期转换
a、日期转文本
date=20210900
i=1
b=`expr $date + $i`
echo $b
c=`expr $b \* 100 `
echo $c
b、日期按格式转成文本
startdate=`date -d "2021-09-01 +$a day" +%Y-%m-%d`
c、拼接字符串
datename1=`date -d "2021-09-01 +$a day" +%Y%m%d`
datename=$datename1"00"
6、修改代码
#格式:
# sed -i "s/$[需要修改的源代码字符串]/$[修改后的代码字符串]/g" ./[需要修改的代码所属的文件名及其后缀]
示例:
sed -i "s/$orginaldateruntime/$newdateruntime/g" ./runtime.txt
7、退出软件执行命令
<<EOF 代表后续语句也作为命令输入,遇到末尾的EOF结束。
<<EOF
# 执行的语句
EOF
示例:
# 1、进入matlab画图文件目录
cd "/vol8/home/caoyu/visualcode/forecast/m_script/wave"
# 2、启动matlab 执行draw_dirmn 代码文件画图,画完退出matlab
matlab -nosplash -nodesktop -r draw_dirmn <<EOF
exit
EOF
# 3、启动matlab 执行draw_hs 代码文件画图,画完退出matlab
matlab -nosplash -nodesktop -r draw_hs <<EOF
exit
EOF
执行exit 或者 quit ,可退出软件
代码
1、复制数据
需要复制一个月的数据,文件夹命名按日期递增。
#!/bin/bash
date=20210900
for((i=1;i<31;i++));
do
b=`expr $date + $i`
echo $b
c=`expr $b \* 100 `
echo $c
filepath="/vol8/home/caoyu/visualcode/forecast/pomout/"
filepathfinal=$filepath$c
echo $filepathfinal
mkdir -p $filepathfinal
originalpath="/vol8/home/caoyu/fvcom/Forecast/cnsforecast/$b/output"
echo $originalpath
echo "cp -r $originalpath/* $filepathfinal"
cp -r $originalpath/* $filepathfinal
done
2、启动matlab软件执行代码
#!/bin/bash
#修改runtime时间
dir_work="/vol8/home/caoyu/visualcode/forecast/"
orginaldateruntime="2021-09-06 00:00:00"
for (( a = 1; a < 30; a++ ));
do
startdate=`date -d "2021-09-01 +$a day" +%Y-%m-%d`
datename1=`date -d "2021-09-01 +$a day" +%Y%m%d`
datename=$datename1"00"
newdateruntime=$startdate" 00:00:00"
#修改runtime时间
cd $dir_work
sed -i "s/$orginaldateruntime/$newdateruntime/g" ./runtime.txt
orginaldateruntime=$newdateruntime
filepath="/vol8/home/caoyu/visualcode/forecast/pomout/$datename"
#e="imgs/sound/"
#f="IMAGES/sound/"
#orgimgpathsound=$dir_work$e$datename
forncname="cns_for_restart_0001.nc"
echo $forncname
#修改文件名
cd "/vol8/home/caoyu/visualcode/forecast/fvcomnc/"
#生成fvcom_3d*.nc
matlab -nosplash -nodesktop -r gen_fvcomnc_s <<EOF
exit()
EOF
matlab -nosplash -nodesktop -r gen_fvcomnc_t <<EOF
exit()
EOF
#sound
cd "/vol8/home/caoyu/visualcode/forecast/m_script/sound/"
matlab -nosplash -nodesktop -r sound_test_v5 <<EOF
exit
EOF
echo $datename"运行完成"
done