An example of how to use getopts in bash

前端 未结 7 2377
小蘑菇
小蘑菇 2020-11-22 07:35

I want to call myscript file in this way:

$ ./myscript -s 45 -p any_string

or

$ ./myscript -h  #should display         


        
7条回答
  •  轻奢々
    轻奢々 (楼主)
    2020-11-22 07:54

    #!/bin/bash
    
    usage() { echo "Usage: $0 [-s <45|90>] [-p ]" 1>&2; exit 1; }
    
    while getopts ":s:p:" o; do
        case "${o}" in
            s)
                s=${OPTARG}
                ((s == 45 || s == 90)) || usage
                ;;
            p)
                p=${OPTARG}
                ;;
            *)
                usage
                ;;
        esac
    done
    shift $((OPTIND-1))
    
    if [ -z "${s}" ] || [ -z "${p}" ]; then
        usage
    fi
    
    echo "s = ${s}"
    echo "p = ${p}"
    

    Example runs:

    $ ./myscript.sh
    Usage: ./myscript.sh [-s <45|90>] [-p ]
    
    $ ./myscript.sh -h
    Usage: ./myscript.sh [-s <45|90>] [-p ]
    
    $ ./myscript.sh -s "" -p ""
    Usage: ./myscript.sh [-s <45|90>] [-p ]
    
    $ ./myscript.sh -s 10 -p foo
    Usage: ./myscript.sh [-s <45|90>] [-p ]
    
    $ ./myscript.sh -s 45 -p foo
    s = 45
    p = foo
    
    $ ./myscript.sh -s 90 -p bar
    s = 90
    p = bar
    

提交回复
热议问题