Проверить правильность переменного числа позиционных параметров, предоставленных в качестве входных данных для сценария оболочки. - PullRequest
0 голосов
/ 16 июня 2020

Для компиляции набора приложений для нескольких платформ необходимо настроить определенные параметры экспорта сборки.

Пример команды:

source exports_file.sh <plaforms> <feature1> <feature2> <feature3>

Здесь позиционный параметр <platform> является обязательным, тогда как другие параметры, такие как <feature1>, <feature2>, <feature3>, необязательны. Их нужно включать только в том случае, если в сборке требуется соответствующая функция.

Набор допустимых параметров командной строки:

source exports_file.sh <plaforms> <feature1> <feature2> <feature3> source exports_file.sh <plaforms> <feature1> <feature2> source exports_file.sh <plaforms> <feature1> source exports_file.sh <plaforms>

Важно отметить, что сценарий должен возвращать ошибку, если:

1) <platform> параметр ввода не предоставляется пользователем.

2) Значение <platform> параметра ввода отсутствует в списке, т. Е. Отличается от 1234, 1235 или 1236.

3) Любая другая функция, кроме <feature1>, <feature2>, <feature3>, предоставляется в качестве входных.

Я написал сценарий, который работает нормально, но я не уверен, правильно ли он проверяет достоверность всех входных параметров.

   $> cat exports_file.sh


    if [ $# -gt 0 ]; then

    platform=$1

    # Common exports
    unset PLATFORM
    unset ENABLE_FEATURE_1
    unset ENABLE_FEATURE_2
    unset ENABLE_FEATURE_3

    echo "INFO: Setting common exports for $platform"
    if [ $platform == "1234" ]
    then
        export PLATFORM=91234

    elif [ $platform == "1235" ]
    then
        export PLATFORM=91235

    elif [ $platform == "1236" ]
    then
        export PLATFORM=91236

    else
        echo "ERROR: Exports are not defined for $platform."
        exit 1
    fi

    # Check for feature based exports <feature1> <feature2> <feature3>
    for var in "$@"
    do
        if [ $var == "arg2" ]
        then
            export ENABLE_FEATURE_1=Y

        elif [ $var == "arg3" ]
        then
            export ENABLE_FEATURE_2=Y

        elif [ $var == "arg4" ]
        then
            export ENABLE_FEATURE_3=Y
        else
            echo "ERROR: unrecognised argument '$var'";
            exit 1
        fi
    done
else
    echo "ERROR: No inputs parameters provided to the scripts."
    echo "Usage: source exports_file.sh <plaforms> <feature1> <feature2> <feature3>"
fi`

Есть ли способ лучше написать этот скрипт. Самое главное - убедиться в правильности всех входных параметров.

Ответы [ 2 ]

2 голосов
/ 16 июня 2020

Оператор case упростит ваш код. Однако сначала закройте как можно скорее, когда обнаружите ошибку, чтобы остальной код не имел отступа.

if [ $# = 0 ]; then
    echo "ERROR: No inputs parameters provided to the scripts." >&2
    echo "Usage: source exports_file.sh <plaforms> <feature1> <feature2> <feature3>" >&2
    exit 1
fi

platform=$1
shift

echo "INFO: Setting common exports for $platform" >&2
case $platform in 
    1234|1235|1236) export PLATFORM=9$platform ;;
    *) echo "ERROR: Exports are not defined for $platform" >&2
       exit 1 ;;
esac


# Check for feature based exports <feature1> <feature2> <feature3>
for var in "$@"
do
    case $var in
      arg2) export ENABLE_FEATURE_1=Y ;;
      arg3) export ENABLE_FEATURE_2=Y ;;
      arg4) export ENABLE_FEATURE_3=Y ;;
      *) echo "ERROR: unrecognized argument '$var'" >&2
         exit 1;;
    esac
done
0 голосов
/ 16 июня 2020
  if [ $# -gt 0 ]; then

    platform=$1

    # Common exports
    unset PLATFORM
    unset ENABLE_FEATURE_1
    unset ENABLE_FEATURE_2
    unset ENABLE_FEATURE_3
    echo  input parameter: $@

    echo "INFO: Setting common exports for $platform"
    if [ $platform == "1234" ]
    then
        export PLATFORM=91234
        export ENABLE_FEATURE_1=Y
        # Result
        echo $PLATFORM
        echo $ENABLE_FEATURE_1

    elif [ $platform == "1235" ]
    then
        export PLATFORM=91235
        export ENABLE_FEATURE_2=Y
        # Result
        echo $PLATFORM
        echo $ENABLE_FEATURE_2

    elif [ $platform == "1236" ]
    then
        export PLATFORM=91236
        export ENABLE_FEATURE_3=Y
        # Result
        echo $PLATFORM
        echo $ENABLE_FEATURE_3

    else
       echo "ERROR: Exports are not defined for $platform."
        exit 1
    fi
    fi

    # Check for feature based exports <feature1> <feature2> <feature3>
    #for var in "$@"
    #do
        #if [ $var == "arg2" ]
        #then
            #export ENABLE_FEATURE_1=Y

        #elif [ $var == "arg3" ]
        #then
            #export ENABLE_FEATURE_2=Y

        #elif [ $var == "arg4" ]
        #then
            #export ENABLE_FEATURE_3=Y
        #else
            #echo "ERROR: unrecognised argument '$var'";
            #exit 1
        #fi
    #done
#else
   #echo "ERROR: No inputs parameters provided to the scripts."
    #echo "Usage: source exports_file.sh <plaforms> <feature1> <feature2> <feature3>"
#fi
...