Ethernet-соединение неуправляемое

Вы сказали getopts, что опция -dдолжна принимать аргумент, а в командной строке вы используете -d -f myformat, что явно (? )говорит: «-f— это аргумент, который я привожу для варианта -d».

Это ошибка не в коде, а в использовании скрипта в командной строке.

Ваш код должен проверять правильность аргументов опции -и правильность установки всех опций.

Возможно что-то вроде

while getopts "d:f:" opt; do
  case $opt in
    d) dir=$OPTARG      ;;
    f) format=$OPTARG   ;;
    *) echo 'error' >&2
       exit 1
  esac
done

# If -d is *required*
if [ ! -d "$dir" ]; then
    echo 'Option -d missing or designates non-directory' >&2
    exit 1
fi

# If -d is *optional*
if [ -n "$dir" ] && [ ! -d "$dir" ]; then
    echo 'Option -d designates non-directory' >&2
    exit 1
fi

Если параметр -dявляется необязательным и если вы хотите использовать значение по умолчанию для переменной dirв приведенном выше коде, вы должны начать с установки dirна это значение по умолчанию. перед циклом while.

Параметр командной строки не может одновременно принимать и не принимать аргумент.

0
17.09.2020, 12:16
0 ответов

Теги

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