user2714325
user2714325

Reputation: 21

how to make sure that N+1 argument is present when Nth argument is equal to "--check"

I am trying to write code to check if any argument (on position N) is equal to "--check" and, if its true, require that next argument (position N+1) is present. Otherwise, exit.

How can i achieve that?

i am trying sth like this but it doesnt seem to work: i am reiterating arguments and if "--check" is found then setting FLAG to 1 which triggers another conditional check for nextArg:

FLAG=0   
for i in "$@"; do     

    if [ $FLAG == 1 ] ; then  
            nextARG="$i"  
            FLAG=0  
    fi  
    if [ "$i" == "--check" ] ; then  
            FLAG=1  
    fi  
done  

if [ ! -e $nextARG ] ; then  

    echo "nextARG not found"  
    exit 0
fi

Upvotes: 2

Views: 76

Answers (2)

konsolebox
konsolebox

Reputation: 75548

You could use a form like this. I use it as a general approach when parsing arguments. And I find it less confusing than using getopts.

while [[ $# -gt 0 ]]; do
    case "$1" in
    --option)
        # do something
        ;;
    --option-with-arg)
        case "$2" in)
        check_pattern)
            # valid
            my_opt_arg=$2
            ;;
        *)
            # invalid
            echo "Invalid argument to $1: $2"
            exit 1
            ;;
        esac
        # Or
        if [[ $# -ge 2 && $2 == check_pattern ]]; then
            my_opt_arg=$2
        else
            echo "Invalid argument to $1: $2"
            exit 1
        fi
        shift
        ;;
    *)
        # If we don't have default argument types like files. If that is the case we could do other checks as well.
        echo "Invalid argument: $1"
        # Or
        case $1 in
        /*)
            # It's a file.
            FILES+=("$1")
            ;;
        *)
            # Invalid.
            echo "Invalid argument: $1"
            exit 1
            ;;
        esac
    esac
    shift
done

Upvotes: 1

tangens
tangens

Reputation: 39733

I would go with getopts. The link shows an example how you could check for your missing parameter.

Upvotes: 2

Related Questions