Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 是/否ksh上的无限循环_Bash_Shell_Infinite Loop_Ksh - Fatal编程技术网

Bash 是/否ksh上的无限循环

Bash 是/否ksh上的无限循环,bash,shell,infinite-loop,ksh,Bash,Shell,Infinite Loop,Ksh,我有一个恼人的问题,似乎导致无限循环,我不知道为什么。如果我调用下面的函数,它会在屏幕上无限重复是/否选项,直到我崩溃 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" "N

我有一个恼人的问题,似乎导致无限循环,我不知道为什么。如果我调用下面的函数,它会在屏幕上无限重复是/否选项,直到我崩溃

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
}
我把睡眠放进去,看看它是否能解决这个问题,但它仍然能解决这个问题。这个问题似乎是断断续续的,并非每次都会发生。这个脚本是用KornShell(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() {
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

}
Auditvi功能:

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() {
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

}

经过一段时间的处理后,每当“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
}

再次感谢各位的帮助。

什么是AuditUploader和Auditvi?不断重复声音,好像有什么东西在向它输入空字符串(或按enter键发送垃圾邮件)。在函数的开头添加
set-x
,这样你就可以跟踪它在做什么这就是@chepner在他的第一个问题中的目的:他想知道那些函数是什么(
AuditUpload
Auditvi
)事实上是这样。如果它们很小,那么也许可以在你的问题中发布它们的源代码,而不是注释,这样它们就更容易阅读。有趣的是,根据你的注释,当你点击无限循环时,它们看起来甚至没有被执行。我假设你只是在命令提示符下运行
AuditUpload