简体   繁体   中英

Infinite loop on yes/no ksh

I have an annoying issue that seems to cause and infinite loop and I can't work out why. If I call the following function, it keeps repeating the yes/no options infinitely down the screen until I crash out.

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
}

I put the sleep in to see if it would remedy the issue but it still does the same. This issue seems to be very intermittent and doesn't happen every time. This script is written in korn shell (ksh).

AuditUploader function:

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 function:

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

}

After a bit of playing around it looks like it was looping whenever the 'curl' command returned a specific error which stopped the kill $$ from working properly. I replaced kill $$ with exit 1 and amended the other functions accordingly. I also put in a contingency to use kermit in case the FTP failed. Anyway, this is what my code looks like now:

#########################################
# 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
}

Thanks again guys for all your help.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM