2016-07-25 8 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

エラーメッセージが表示されますか?あまりにも多くのものがあるようです。 –

+0

私はそれがbash( '/ bin/sh'とマークされています。しかし、 'files'は決して変更されないので、ループを終了させるものはまだありません。 – dhke

+0

@ that-other-guy私はそれをstackoverflowに追加するときに間違いを犯しました。閉じた「fi」のうちの1つを削除しました。私は何の誤りもありません。私は 'if'ステートメントを間違って入れ子にしたのかどうかは分かりませんでしたが、私は文法的に間違ったものは何も得ていません。 – WxJack

答えて

0

このスクリプトにはhere-documentがあります。これはここでは文書が正しく終了していないことを示しています。終了マーカーEOFは、最初の列に配置する必要があります。インデントされません。

これをインデントする場合は、タブを使用する必要があり、here-documentの先頭は<<-'EOF'である必要があります。

誤ってインデントされたEOFマーカーの効果は、残りのスクリプトがhere-documentの内容として読み取られることです。

チャールズ・ダフィーが指摘しているように、ShellCheckはあなたの友人です。

+0

これは、stackoverflowでインデントされただけでした。それは私のスクリプトで適切にインデントされました。あなたが言及したダッシュを追加しましたが、出力に変更はありません。私はまだエコーを見ていません "EDEXに$ {segment}変換されたmodisファイルをエクスポートしました。"スクリプトの実行時。 – WxJack

+0

@WxJackまあ、どうしたらいいですか? – Kusalananda

+0

スクリプトを一から書き直しましたが、今は動作しているようです。どこかで私のコーディングではちょっと変わったようだった。私はあなたの助けに感謝します。ありがとうございました。 :) – WxJack

関連する問題