как передать аргументы с флагами в Bash - PullRequest
0 голосов
/ 10 октября 2019

Я пытаюсь запустить сценарии, как показано ниже. Я хочу установить для флагов значение true, но оно не работает.

./test.sh ./api_service -s -i

, если я запускаю сценарии только с флагами, я могу получить ожидаемый результат. как передать аргументы и флаги в скрипт?

./test.sh -s -i

script:

#!/bin/bash

input_project_path="$1"
name=$(echo ${input_project_path} | cut -d"/" -f2)
echo $name

skiptests=false
install_libs=false

while getopts ":si" option; do
  case "${option}" in
    s )
        skiptests=true
        if [ "$skiptests" = true ] ; then
            echo "something....";
        else
            echo "test...";
        fi
        ;;
    i)
        install_libs=true
        ;;
    \?)
        echo "Invalid option: -$OPTARG" >&2
        exit 1
        ;;
    :)
        echo "Option -$OPTARG requires an argument." >&2
        exit 1
        ;;
    esac
done

echo $skiptests
echo $install_libs

1 Ответ

0 голосов
/ 10 октября 2019

Если вам нужно установить значение для флага, то вам нужно сделать 2 изменения:

  • добавить : после опции флага в строке getopts
  • Сохраните значение, используя $OPTARG

Например, если вы хотите передать значение для флага i, но не s, вы должны сделать что-то вроде этого:

while getopts ":si:" option; do
  case "${option}" in
    s )
        skiptests=true
        if [ "$skiptests" = true ] ; then
            echo "something....";
        else
            echo "test...";
        fi
        ;;
    i)
        install_libs=$OPTARG
        ;;
    ...
    esac
done

Я использовал ..., чтобы не копировать оставшуюся часть вашего case заявления.

Обратите внимание, что:

  • После * есть дополнительный :1025 * option
  • И в операторе case i значение установлено на значение $OPTARG.
  • В случае s не было никаких изменений
  • Также обратите внимание, что значения options 'следуют после соответствующих флагов

См. Эту ветку Пример использования getopts в bash для большей глубиныобъяснение getopt.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...