getopt оболочки с аргументом справки

Компиляторы по умолчанию gccдистрибутива Debian реализуют c++14. Если у вас дистрибутив RedHat, попробуйте использовать devtoolset-6-gccилиdevtoolset-6-gcc-c++

3
20.12.2020, 16:54
1 ответ

Я исправил ваш скрипт, добавив короткие опции в getopt, обратите внимание, что :после каждого optозначает, что для этой опции требуется аргумент:

#!/bin/bash
log_type='unset'
state='unset'
date='unset'
help='unset'


mode="$1"
usage()
{
  echo "Usage: LogRotator [ -t | --log_type  - Allowed values: [access error] ] 
                          [ -s | --state - Allowed values: [archive or backup] ]
                          [ -d | --date 1-10-2020] 
                          [ -h | --help]

        Modes:
            1) list - list the files
            2) restore  - restore the files"
  exit 2
}


ARGUMENT_LIST=(
    "log-type"
    "state"
    "date"
)



# read arguments
opts=$(getopt \
    -o t:s:d:h \
    --longoptions "$(printf "%s:," "${ARGUMENT_LIST[@]}")",help \
    --name "$(basename "$0")" \
    -- "$@"
)

VALID_ARGUMENTS=$?
if [ "$VALID_ARGUMENTS" != "0" ]; then
  usage
fi

eval set -- $opts

while [[ $# -gt 0 ]]; do
    case "$1" in
        -t | --log-type)
            log_type=$2
            shift 2
            ;;

        -s | --state)
            state=$2
            shift 2
            ;;

        -d | --date)
        date=$2
        shift 2
        ;;

        -h | --help)
        help=1
        shift
        ;;
        *)
        break
        ;;
    esac
done

if [[ "$help" == 1 ]]
then
    usage
fi
1
18.03.2021, 22:42

Теги

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