2014-12-09 2 views
0

Я пытаюсь написать простой скрипт, чтобы что-то сделать в зависимости от входных аргументов. Вот что я написалПочему третий аргумент не разбирается в getopts bash

#!/bin/bash 
usage() { echo "Usage: $0 [-l <string>] [-p <string>] [-d <string> ]" 1>&2; exit 1; } 

while getopts ":l:p:d" o; do 
    case "${o}" in 
     l) 
      l=${OPTARG} 
     echo "$l" 
      ;; 
     p) 
      p=${OPTARG} 
     echo "$p" 
      ;; 
     d) 
      d=${OPTARG} 
     echo "$d" 
      ;; 
     *) 
      usage 
      ;; 
    esac 
done 
shift $((OPTIND-1)) 

if [ -z "${l}" ] && [ -z "${p}" ] && [ -z "${d}" ]; then 
    usage 
fi 

Сво возможность проанализировать входы, приведенные в -l и -p надлежащим образом, но третий вход -d не разбирается.

Выход:

[email protected]:~/$ ./play.sh -l "l is parsed" -p "p is parsed" -d "d is parsed" 
l is parsed 
p is parsed 

Это работает

[email protected]:~/$ ./play.sh -p "p is parsed" 
p is parsed 

В то время как это не работает

[email protected]:~/$ ./play.sh -d "d is parsed" 

Usage: ./play.sh [-l <song name>] [-p <song name>] [-d <song name> ] 

Что я здесь делаю неправильно? Спасибо за вашу помощь заранее.

ответ

2

У вас не хватает : в то время как оператор передачи аргументов

#!/bin/bash 
usage() { echo "Usage: $0 [-l <string>] [-p <string>] [-d <string> ]" 1>&2; exit 1; } 

while getopts ":l:p:d:" o; do 
    case "${o}" in 
     l) 
      l=${OPTARG} 
     echo "$l" 
      ;; 
     p) 
      p=${OPTARG} 
     echo "$p" 
      ;; 
     d) 
      d=${OPTARG} 
     echo "$d" 
      ;; 
     *) 
      usage 
      ;; 
    esac 
done 
shift $((OPTIND-1)) 

if [ -z "${l}" ] && [ -z "${p}" ] && [ -z "${d}" ]; then 
    usage 
fi 

Пробег:

./script.sh -l "l is parsed" -p "p is parsed" -d "d is parsed" 

Выход:

l is parsed 
p is parsed 
d is parsed 

Пробег:

./script.sh -d "d is parsed" 

Выход:

d is parsed 
+0

Совершенный !! так глупо от меня !! Спасибо :) –

+0

@SagarSakre, Welcome:) - – Kalanidhi

+0

Я думаю '': l: p: d: "' должно быть '' l: p: d: "' ... – anishsane

 Смежные вопросы

  • Нет связанных вопросов^_^