ループが終了しない場合、ループは2番目の引数に進みません


0

「for name in」を使用して値のリストをループしようとしています。行の最初の値を使用しますが、終わりのないループにとどまります。

#!/bin/ksh
set -x
# created 7 JAn 2013 by L Cooper
# purpose is to verify completion of QAD online backup. If incomplete then email personnel
#EMAILTO=mfc_support@manitowoc.com
EMAILTO=lee.cooper@manitowoc.com
TEST=1740               # Success code
SVR=IBM2
LOGDIR=/tmp             #Log location
LOGS="onlineeuro onlinedata online"             # logs to check
# Check QAD online backup log for code 3740, which indicates successful backup

#for logchk in onlineeuro onlinedata onlinena
for logchk in $LOGS
do
        while [ "$(/usr/bin/tail -n -2 $LOGDIR/$logchk.log | head -n +1 | tail -c 6 | head -c 4)" != "$TEST" ]
        do
           echo $LOGDIR/$logchk
           echo "The QAD online backup $logchk on $SVR may have errors...please check" | mailx -s "***TEST*** There mat be QAD onl
ine backup errors!!" $EMAILTO

        done
done

実行の出力:

+ EMAILTO=lee.cooper@manitowoc.com
+ TEST=1740
+ SVR=IBM2
+ LOGDIR=/tmp
+ LOGS=onlineeuro onlinedata online
+ /usr/bin/tail -n -2 /tmp/onlineeuro.log
+ head -n +1
+ head -c 4
+ tail -c 6
+ [ 3740 != 1740 ]
+ echo /tmp/onlineeuro
/tmp/onlineeuro
+ mailx -s ***TEST*** There mat be QAD online backup errors!! lee.cooper@manitowoc.com
+ echo The QAD online backup onlineeuro on IBM2 may have errors...please check
+ /usr/bin/tail -n -2 /tmp/onlineeuro.log
+ head -n +1
+ head -c 4
+ tail -c 6
+ [ 3740 != 1740 ]
+ echo /tmp/onlineeuro
/tmp/onlineeuro
+ mailx -s ***TEST*** There mat be QAD online backup errors!! lee.cooper@manitowoc.com
+ echo The QAD online backup onlineeuro on IBM2 may have errors...please check
+ /usr/bin/tail -n -2 /tmp/onlineeuro.log
+ head -n +1
+ head -c 4
+ tail -c 6
+ [ 3740 != 1740 ]
+ echo /tmp/onlineeuro
/tmp/onlineeuro
+ mailx -s ***TEST*** There mat be QAD online backup errors!! lee.cooper@manitowoc.com
+ echo The QAD online backup onlineeuro on IBM2 may have errors...please check
+ /usr/bin/tail -n -2 /tmp/onlineeuro.log
+ head -c 4
+ head -n +1
+ tail -c 6
+ [ 3740 != 1740 ]
+ echo /tmp/onlineeuro
/tmp/onlineeuro
+ mailx -s ***TEST*** There mat be QAD online backup errors!! lee.cooper@manitowoc.com
+ echo The QAD online backup onlineeuro on IBM2 may have errors...please check
+ /usr/bin/tail -n -2 /tmp/onlineeuro.log

****** は無限に繰り返されます ******


あなたのコードをコードブロックに入れて、フォーマットが損なわれないようにしてください。あなたにとって正しいことを確認してください!ありがとう、そしてスーパーユーザーへようこそ!
オタクウォーラー

1
問題は、しばらくループすることです(つまり、常に真です)(3740!= 1740)
オリビエデュラック

回答:


-1

while ... do ... doneループでは、次のように "if"ブロックを書くことを意図していたようです。

if  [ "$(/usr/bin/tail -n -2 $LOGDIR/$logchk.log | head -n +1 | tail -c 6 | head -c 4)" != "$TEST" ]
then
    #stuff
done

ところで(しかし、話題ではありませんが)、 "tail、head、tail、head"パイプラインは私にはかなり難読化されているように見えますが、ログファイルのどの行に特に興味がありますか?

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.