как использовать getopt (s) как технику для передачи аргумента в bash - PullRequest
3 голосов
/ 26 июля 2011

Может кто-нибудь показать мне пример того, как правильно использовать getopts или любой другой метод, который я мог бы передать в качестве аргумента?Я пытаюсь написать это в Unix Shell / Bash.Я вижу, что есть getopt и getopts и не уверен, что лучше использовать.В конце концов, я построю это, чтобы добавить больше возможностей.

В этом случае я хочу передать путь к файлу в качестве входных данных для сценария оболочки и поместить описание в том случае, если он не был введен правильно.

export TARGET_DIR="$filepath"

Например: (вызовв командной строке)

./mytest.sh -d /home/dev/inputfiles

Сообщение об ошибке или запрос на правильное использование при запуске таким образом:

./mytest.sh -d /home/dev/inputfiles/

Ответы [ 2 ]

6 голосов
/ 26 июля 2011

Как пользователь, я был бы очень раздражен программой, которая выдавала мне ошибку для предоставления имени каталога с косой чертой.Вы можете просто удалить его, если необходимо.

Пример оболочки с довольно полной проверкой ошибок:

#!/bin/sh

usage () {
  echo "usage: $0 -d dir_name"
  echo any other helpful text
}

dirname=""
while getopts ":hd:" option; do
  case "$option" in
    d)  dirname="$OPTARG" ;;
    h)  # it's always useful to provide some help 
        usage
        exit 0 
        ;;
    :)  echo "Error: -$OPTARG requires an argument" 
        usage
        exit 1
        ;;
    ?)  echo "Error: unknown option -$OPTARG" 
        usage
        exit 1
        ;;
  esac
done    

if [ -z "$dirname" ]; then
  echo "Error: you must specify a directory name using -d"
  usage
  exit 1
fi

if [ ! -d "$dirname" ]; then
  echo "Error: the dir_name argument must be a directory
  exit 1
fi

# strip any trailing slash from the dir_name value
dirname="${dirname%/}"

Документацию getopts смотрите в руководстве по bash

0 голосов
/ 11 июля 2013

Исправление в строке ':)':

:)  echo "Error: -$OPTARG requires an argument"

, потому что если после флага не задано значение, OPTARG получает имя флага, а для флага устанавливается значение ":", которое внапечатанный выше образец:

Error: -: requires an argument

, который не был полезной информацией.

То же самое относится к:

\?)  echo "Error: unknown option -$OPTARG"

Спасибо за этот образец!

...