2014-10-11 4 views
2

Я должен написать Баш скрипт:Необходимых опции getopts Linux

schedsim.sh [-h] [-C#CPUs ] -i pathfile 

ч и с являются дополнительными опциями. i требуется, когда запускается скрипт, если у него нет опции i -> сообщение об ошибке.

Как сделать необходимый вариант в getopts? Спасибо!

другой вопрос: как сделать значение по умолчанию для аргумента опции? скажем, если c не предоставлен аргумент -> значение по умолчанию аргумента c равно 1.

ответ

5

Вы не можете сделать требуемый аргумент, как в «встроенный getopts возвращает ошибку, если этот аргумент отсутствует».

Но это тривиально, чтобы сделать функцию, которая делает это самостоятельно:

#!/bin/bash 

function parseArguments() { 
    local b_hasA=0 
    local b_hasB=0 
    local b_hasC=0 

    while getopts 'a:b::c' opt "[email protected]"; do 
    case $opt in 
    'a') 
     b_hasA=1 
     ;; 
    'b') 
     b_hasB=1 
     ;; 
    'c') 
     b_hasC=1 
     ;; 
    esac 
    done 

    if [ $b_hasA -ne 0 ]; then 
    echo "A present" 
    fi 
    if [ $b_hasB -ne 0 ]; then 
    echo "B present" 
    fi 
    if [ $b_hasC -ne 0 ]; then 
    echo "C present" 
    else 
    echo "Error: C absent" 
    exit 1 
    fi 
} 

#Quotes required to avoid removing characters in $IFS from arguments 
parseArguments "[email protected]" 

Тесты:

$ ./test.bash -c 
C present 

$ ./test.bash -b 
./test.bash: option requires an argument -- b 
Error: C absent 

$ ./test.bash -b foo 
B present 
Error: C absent