无效循环是/不是ksh

时间:2014-09-11 14:20:01

标签: bash shell infinite-loop ksh

我有一个令人烦恼的问题似乎导致无限循环,我无法解决原因。如果我调用以下函数,它会在屏幕上无限地重复yes / no选项,直到我崩溃。

AuditUpload() {
    clear
    echo "Audit report generated successfully"
    echo " "
    echo "Do you wish to upload qhub_audit.csv? (1 = Yes/2 = No):"
    sleep 1
    select yn in "Yes" "No"; do
    case $yn in
        Yes ) AuditUploader; Auditvi; exit;;
        No ) echo "Upload cancelled"; Auditvi; exit;;
    esac
    done
}

我把睡眠放进去看看它是否会解决这个问题,但它仍然会做同样的事情。这个问题似乎是非常间歇性的,每次都不会发生。这个脚本是用korn shell(ksh)编写的。

AuditUploader功能:

AuditUploader() {
echo "Uploading qhub_audit.csv to $HOST..." 
curl -v -T qhub_audit.csv -# ftp://xxxxxxxx:xxxxxxxxx@xxxxxxxxxxxxx.com/
    if [ "$?" -ne "0" ]
    then
        echo "ERROR: Cannot upload qhubload.csv" 
        exit
    else
        clear
        echo "qhub_audit.csv has been put on $HOST successfully"

        tput cup 5 5
        echo "Copy and paste this link into internet explorer to download:"
        tput cup 7 5
        echo "ftp://xxxxxxxx:xxxxxxxxx@xxxxxxxxxxxxx.com/qhub_audit.csv"
        read LINK
    fi
}

Auditvi功能:

Auditvi() {
clear
echo "Do you wish to view qhub_audit.csv? (1 = Yes/2 = No):"
sleep 1
    select yn in "Yes" "No"; do
    case $yn in
    Yes ) vi qhub_audit.csv; exit;;
    No ) exit;;
    esac
done

}

1 个答案:

答案 0 :(得分:0)

经过一段时间的游戏后,只要'curl'命令返回一个特定的错误,阻止kill $$正常工作,它就会循环播放。我将kill $$替换为exit 1并相应地修改了其他功能。如果FTP失败,我还要使用kermit。无论如何,这就是我现在的代码:

#########################################
# Upload quotehub audit report function #
#########################################
AuditUploader() {
    echo "Uploading qhub_audit.csv to $HOST..." 
    curl -v -T qhub_audit.csv -# ftp://$USER:$PASSWD@$HOST/ -m 10
        if [ "$?" -ne "0" ]
            then
            echo "ERROR: Cannot upload qhubload.csv via FTP" 
            if [ ${term} = "tty1A" ]
                then
                echo "Attempting to download to modems server..."
                wermit -s qhub_audit.csv
                if [ $? -ne 0 ]
                    then
                    echo "Cannot upload to modems either!"
                    echo "This file will have to be downloaded manually"
                    exit 1
                else
                    clear
                    echo "qhub_audit.csv has been put on modems server successfully"
                    tput cup 5 5
                    echo "Copy and paste this link into START -> RUN to download:"
                    tput cup 7 5
                    echo "\\\\\\xxxxxxxx\download\general\qhub_audit.csv"
                    read LINK
                fi
            else
                echo "Upload failed!"
                exit 1
            fi
        else
            clear
            echo "qhub_audit.csv has been put on $HOST successfully"
            tput cup 5 5
            echo "Copy and paste this link into internet explorer to download:"
            tput cup 7 5
            echo "ftp://$USER:$PASSWD@$HOST/qhub_audit.csv"
            read LINK
        fi
}

#######################################################
# Function to prompt user to upload qhub audit report #
#######################################################
AuditUpload() {
    clear
    echo "Audit report generated successfully"
    echo ""
    echo "Do you wish to upload qhub_audit.csv? (y/n):"
    read REPLY
    case "$REPLY" in
        Y) AuditUploader; Auditvi; exit;;
        y) AuditUploader; Auditvi; exit;;
        N) Auditvi; exit;;
        n) Auditvi; exit;;
        *) echo "invalid option";;
    esac
}
######################################
# Function to view qhub audit report #
######################################
Auditvi() {
    if [ "$?" -ne "0" ]
        then
        exit 1
    else
        clear
        echo "Do you wish to view qhub_audit.csv? (y/n):"
        read REPLY
        case "$REPLY" in
            Y) vi qhub_audit.csv; exit;;
            y) vi qhub_audit.csv; exit;;
            N) exit;;
            n) exit;;
            *) echo "invalid option"; Pause; Auditvi;;
        esac
    fi
}

再次感谢各位帮助。