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

問題は、ユーザーが 1 つのオプションを選択してコードが実行された後、新しい選択を待ち続けることですが、終了させたいです。どうやってやるの?

4

1 に答える 1

1

breakループを終了しますが、ネストされたループがあり、外側のループでスタックします。break実際には、終了する囲みループの数を指定する引数を取るため、 yourbreakbreak 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

PS3selectステートメントを使用するときに表示されるプロンプトです。外側のオプションがである限り、1 つのみが発行されるためouter1、外側にループ バックします。を選択すると、 でプログラムを終了します。selectbreakouter2break 2

于 2016-02-10T17:18:27.937 に答える