2016-09-03 1 views
1

Я пытаюсь получить следующее в качестве действительных вызовов моего сценария:Оболочка: установить необязательный аргумент или использовать значение по умолчанию с помощью getopts?

sh name.sh -l -a 
sh name.sh -l 

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

default="no" 

echo "Initial parameters. 

while getopts ":l:a:" o; do 
    case "${o}" in 
     l) 
      ...;; 
     a) 
      a+=(${OPTARG}) 
      IFS=',' read -a myarray <<< "$a" 
      default="yes" 
      ;; 
     :) 
      echo "Missing option argument for -$OPTARG" >&2; exit 1;; 
     *) 
      usage;; 
    esac 
done 
shift $((OPTIND-1)) 

if [ -z "${l}" ] || [ -z "${a}" ] ; then 
    usage 
fi 

Мне просто нужно знать, как установить в getopts необязательный флаг -a с его аргументом. Спасибо :)

+0

Возможный дубликат [опциональный аргумент с getopts] (http://stackoverflow.com/questions/11517139/optional-option-argument-with-getopts) – qzb

+0

@qzb нет, я использую getopts и не хочу обойтись без него. – Momina

ответ

0

Насколько я знаю, getopts не поддерживает дополнительные опции-аргументы. Вы можете обойти это путем обработки опции-аргумента сами:

#!/bin/bash 

while getopts "x" o; do 
    case "${o}" in 
    x) 
     OPTARG=${!OPTIND} 

     if [ "${OPTARG:0:1}" == "-" ] || [ "$#" -lt "$OPTIND" ]; then 
     OPTARG="DEFAULT" 
     else 
     OPTIND=$(($OPTIND + 1)) 
     fi 

     echo $OPTARG 
     ;; 
    esac 
done 
Смежные вопросы