2014-10-27 5 views
4

Я проанализировал некоторые подобные вопросы, размещенные здесь, но они мне не подходят.Имея getopts, чтобы показать справку, если никаких параметров не было

Я получил этот замечательный Баш скрипт, который делает некоторые интересные функции, вот соответствующий раздел коды:

while getopts ":hhelpf:d:c:" ARGS; 
do 
    case $ARGS in 
     h|help) 
      help_message >&2 
      exit 1 
      ;; 
     f) 
      F_FLAG=1 
      LISTEXPORT=$OPTARG 
      ;; 
     d) 
      D_FLAG=1 
      OUTPUT=$OPTARG 
      ;; 
     c) 
      CLUSTER=$OPTARG 
      ;; 
     \?) 
      echo "" 
      echo "Unimplemented option: -$OPTARG" >&2 
      echo "" 
      exit 1 
      ;; 
     :) 
      echo "" 
      echo "Option -$OPTARG needs an argument." >&2 
      echo "" 
      exit 1 
      ;; 
     *) 
      help_message >&2 
      exit 1 
      ;; 
    esac 
done 

Теперь все мои варианты хорошо работает, если срабатывают. То, что я хочу, это getopts, чтобы выплеснуть функцию help_message, когда не запускается никакой параметр, скажем, что скрипт запущен только ./scriptname.sh без аргументов.

Я видел несколько способов размещены здесь, внедрение IF цикла и функции, но, так как я только начинаю с Баш и у меня уже есть некоторые, если циклы по этому сценарию, я хотел бы знать, если есть проще (и довольно) к этому.

+1

Я не думаю, что 'help' в этой строке' getopts' делает то, что вы ожидаете от нее. 'getopts'doesn't do long options. Это должно быть добавление опций для 'e',' l' и 'p' для этого вызова. –

+0

Это 'help' работает исправно. – Omar

+0

Вы в этом уверены? Что вы испытываете, чтобы это увидеть? Прикрепите «случай эха h» в блоке case «h | help» и «echo» case * ''в случае' * ', а затем попробуйте' script -help' (а затем 'script -l') и посмотри, что получишь. Также 'script --help' (который будет длинной опционной версией). –

ответ

2

Большое спасибо Этан Рейснер, я в конечном итоге, используя свое предложение:

if [ $# -eq 0 ]; 
then 
    help_message 
    exit 0 
else 
...... remainder of script 

Это работает именно так, как я предполагал. Спасибо.

+0

Ум, вы должны отметить его ответ как правильный! –

6

Если вы просто хотите, чтобы скрипт вызывался без параметров, просто проверьте значение $# в своем скрипте и выйдите с сообщением, когда оно равно нулю.

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