Bash скриптовые переключатели - PullRequest
0 голосов
/ 24 января 2020
#!/bin/bash
while getopts "p:" opt; do
case ${opt} in
 p )#print the argument value
echo "I like $OPTARG programming"
;;
 \? )

Что если я захочу напечатать ошибку, если не дам '-p'

1 Ответ

2 голосов
/ 24 января 2020

Когда у меня есть обязательная опция в моих сценариях оболочки, я использую расширение параметров, а именно: ${variable:?message}, которое будет печатать message, если $variable пусто или не установлено. Вы можете ввести это в свой код следующим образом:

#!/bin/bash
while getopts "p:" opt
do
  case ${opt} in
    p) valueToPrint=$OPTARG ;;
  esac
done

# print the argument value
printf "I like %s programming\n" ${valueToPrint:?A -p option is required.}

У вас есть три сценария ios, которые могут возникнуть в этой программе:

  • Без параметра:

    $ bash test.sh
    test.sh: line 10: valueToPrint: A -p option is required.
    
  • С флагом опции, но без параметра:

    $ bash test.sh -p
    test.sh: option requires an argument -- p
    test.sh: line 10: valueToPrint: A -p option is required.
    
  • С флагом опции и параметром:

    $ bash test.sh -p bash
    I like bash programming
    
...