2016-07-25 5 views
0

아래 스크립트를 실행하려고합니다. 내가 겪고있는 문제는 do 루프 이후에 아무 것도 실행하지 않는다는 것입니다. 루프 이후에 내가 겪은 일은 중요하지 않습니다. 그래서 절대 실행하지 않습니다. 그래서 나는 어딘가에서 뭔가를 놓치고 있습니다.do 루프 이후에 스크립트가 너무 일찍 종료됩니다. 마지막 "echo"는 실행되지 않습니다.

더 효율적인 방법이나 스크립트 작성에 대한 제안 사항이 있습니까? 나는 스크립팅 환경에 아주 익숙하며, 사물에 대해 더 나은 방향으로 나아가는 데 매우 개방적이다.

#!/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

오류 메시지가 있습니까? 당신은 너무 많은 'fi'를 가지고있는 것처럼 보입니다. –

+0

필자는 bash ('/ bin/sh'로 표시됨, 촬영 공격을 받아야 함)라고 생각합니다. 그러나'files'는 결코 수정되지 않기 때문에 루프를 종료시키는 것은 아무것도 보지 못합니다. – dhke

+0

@ that-other-guy 나는 그것을 stackoverflow에 추가 할 때 실수를했다. 닫는 'fi'중 하나를 제거했습니다. 나는 어떤 오류도 받고 있지 않다. 나는 if 문을 잘못 선언했는지 확신 할 수 없었지만 구문 상으로는 잘못된 것이 전혀 없습니다. – WxJack

답변

0

해당 스크립트에는 here-document가 있습니다. 문서가 제대로 종료되지 않았습니다. 끝 마커 EOF은 첫 번째 열에 있어야하며 들여 쓰여지지 않아야합니다.

들여 쓰기를하려면 탭이 있어야하고 여기 문서의 시작은 <<-'EOF'이어야합니다.

잘못 들여 쓰여진 EOF 마커의 효과는 나머지 스크립트가 here-document의 내용으로 읽히는 점입니다.

Charles Duffy가 지적했듯이 ShellCheck은 (는) 친구입니다.

+0

그것은 단지 stackoverflow에 들여 쓰기되었습니다. 내 대본에서 제대로 들여 쓰기가되었습니다. 내가 언급 한 대시를 추가했지만 출력에는 변화가 없습니다. 나는 여전히 echo를 보지 못하고있다 "우리는 EDEX로 $ {segment} 변환 된 modis 파일을 수출했다." 스크립트가 실행될 때 – WxJack

+0

@WxJack 글쎄, 뭐라 할 수 있겠 어. – Kusalananda

+0

나는 처음부터 스크립트를 다시 작성했는데 이제는 작동하는 것처럼 보입니다. 마치 어딘가에서 코딩하는 것만 큼 복잡한 것처럼 보입니다. 상관없이 당신의 도움을 주셔서 감사합니다. 고맙습니다. :) – WxJack