0

我正在编写一个脚本来备份我的 CouchPotatoServer,但我遇到了问题。

这是我遇到问题的代码:

select OPTION in Backup Restore Finish; do
    echo "You choose $OPTION CouchPotatoServer settings";
    case $OPTION in
        Backup)
            echo "Backing up settings file to $CPBPATH:";
            cp $CPSPATH/settings.conf $CPBPATH/settings-"$(date +%Y%m%d-%H%M)".bak ;
            echo "Done!"
            break
            ;;
        Restore)
            echo "Please choose a backup to restore settings" ;
            AVAILABLEFILES="($(find $CPBPATH -maxdepth 1 -print0 | xargs -0))"
            select FILE in $AVAILABLEFILES; do
                cp "$FILE" $CPSPATH/settings.conf ;
                echo "restored $FILE"
                break
                ;;
done

问题是用户选择一个选项并执行代码后,它一直在等待新的选择,但我希望它退出。我怎样才能做到这一点?

4

1 回答 1

1

break退出循环,但您有嵌套循环并卡在外部循环中。break实际上需要一个参数来指定要退出多少个封闭循环,因此当您替换break为 时break 2,您还将退出外部select循环。

这是一个小脚本来演示语句中的不同break级别:select

#!/bin/bash

PS3="Outer selection: "
select option1 in outer1 outer2 ; do
    echo "option1 is $option1"
    PS3="Inner selection: "
    case "$option1" in
        outer1)
            select option2 in inner1 inner2; do
                echo "option2 is $option2, issuing 'break'"
                PS3="Outer selection: "
                break
            done
            ;;
        outer2)
            select option2 in inner3 inner4; do
                echo "option2 is $option2, issuing 'break 2'"
                break 2
            done
            ;;
    esac
done

PS3是使用select语句时显示的提示。只要外部选项是outer1,您就会循环回到外部select,因为只break发出一个;如果您选择outer2,您将使用 退出程序break 2

于 2016-02-10T17:18:27.937 回答