Где сохраняются файлы при использовании привязки mount --?

Когда вы используете shift 2во внутреннем case, вы смещаете $1и $2, но не $3, имя файла.

Вам потребуется выполнить отдельный цикл для анализа параметров подкоманд mode1и mode2.

Предполагая, что когда в аргументе командной строки скрипта находится подкоманда, остальные параметры и аргументы -параметров принадлежат этой подкоманде, вы можете разделить синтаксический анализ следующим образом:

run_mode1 () {
    while [ "$#" -gt 0 ]; do
        case "$1" in
        -h | --help)
            usage_mode1
            exit
            ;;
        -1 | --option1)
            val1="$2"
            shift 2
            ;;
        -2 | --option2)
            val2="$2"
            shift 2
            ;;
        *)
            echo "ERROR: unknown parameter $1"
            usage_mode1
            exit 1
            ;;
        esac
    done

    # code for actually running mode1 goes here
}

while [[ $# -gt 0 ]]
do
    case "$1" in
    -h | --help)
        usage_general
        exit
        ;;

    mode1)
        shift
        run_mode1 "$@"
        break
        ;;

    *)
        echo "ERROR: unknown parameter $1"
        usage_general
        exit 1
        ;;
    esac
done

Здесь мы запускаем функцию оболочки, как только встречаем mode1среди аргументов командной строки. Эта функция занимается синтаксическим анализом остальной части списка аргументов.

Это, очевидно, будет работать только в определенных обстоятельствах, когда все опции для сценария(не для подкоманды )происходят до любой заданной подкоманды в командной строке, и что может быть только одна подкоманда с параметрами, заданными при любом вызове сценария.

Можно было бы реализовать парсинг командной строки таким образом, чтобы скрипт мог одновременно принимать две или более подкоманд с параметрами, как в

./script.sh...options... mode1...options... mode2...options...

но пока оставлю это.

1
20.07.2021, 07:25
0 ответов

Теги

Похожие вопросы