do循环后脚本过早终止。最后"回声"没有执行。

时间:2016-07-25 19:18:39

标签: arrays bash scripting do-while do-loops

我希望在下面执行以下脚本。我遇到的问题是它在do循环后不会执行任何操作。在循环之后我碰巧遇到的事情并不重要,它永远不会执行,所以我在某处遗漏某些东西。

此外,有关更有效的方式或编写此脚本的任何建议?我对脚本编写环境很陌生,对更好的处理方式非常开放。

#!/bin/bash

# mcidas environment

PATH=$HOME/bin:
PATH=$PATH:/usr/sww/bin:/usr/local/bin:$HOME/mcidas/bin
PATH=$PATH:/home/mcidas/bin:/bin:/usr/bin:/etc:/usr/ucb
PATH=$PATH:/usr/bin/X11:/common/tool/bin:.

export PATH

MCPATH=$HOME/mcidas/data
MCPATH=$MCPATH:/home/mcidas/data

export MCPATH

#variables
basedir1="ftp://ladsweb.nascom.nasa.gov/allData/6/MOD02QKM" #TERRA
basedir2="ftp://ladsweb.nascom.nasa.gov/allData/6/MYD02QKM" #AQUA
day=`date +%j`
day1=`date +"%j" -d "-1 day"`
hour=`date -u +"%H"`
min=`date -u +"%m"`
year=`date -u +"%Y"`
segment=1
count=$(ls /satellite/modis_processed/ | grep -v ^d | wc -l) 
count_max=25
files=(/satellite/modis_processed/*)



if [ $hour -ge "17" ]; then

workinghour="16"
echo "Searching for hour $workinghour"
url="${basedir2}/${year}/${day1}/MYD02QKM.A${year}${day1}.${workinghour}*.006.${year}*" 
wget -r -nd --no-parent -nc -e robots=off  -R 'index.*' -P /satellitemodis/ $url 
#find /satellite/modis/ -type f -mmin -30 -exec cp "{}" /satellite/modis_processed/ \;

for files in /satellite/modis_processed/*
do

    echo "The number used for the data file is ${count}"
    echo "The number used for the image file is ${segment}"

    export segment
    export count

    #Run McIDAS
mcenv <<- 'EOF'
imgcopy.k MODISD.${count} MODISI.${segment} BAND=1 SIZE=SAME
imgremap.k MODISD.${segment} MODISI.${segment} BAND=1 SIZE=ALL PRO=MERC 
imgcha.k MODISI.${segment} CTYPE=BRIT
exit
EOF

    segment=`expr ${segment} + 1`
    count=`expr ${count} - 1`

    #Reset Counter if equal or greater than 25
    if [[ $segment -ge $count_max ]]; then
    segment=1
    fi

    find /satellite/awips -type f -name "AREA62*" -exec mv "{}" /awips2/edex/data/manual/ \; 
done;

echo "We have exported ${segment} converted modis files to EDEX."
fi

1 个答案:

答案 0 :(得分:0)

您在该脚本中有一个here-document。那里的文件未正确终止。结束标记EOF需要位于第一列,而不是缩进。

如果缩进,则必须使用制表符,here-document的开头应为<<-'EOF'

错误缩进EOF标记的效果是脚本的其余部分被读作here-document的内容。

正如查尔斯达菲指出的那样,ShellCheck是你的朋友。