Bash case statement

后端 未结 3 1169
傲寒
傲寒 2020-12-31 11:02

I\'m trying to learn case as I was to write a fully functional script.

I\'m starting off with the below

#!/bin/sh
case $@ in

    -h|--help)
                 


        
相关标签:
3条回答
  • 2020-12-31 11:39

    Try this

    #!/bin/sh
    
    usage() {
        echo `basename $0`: ERROR: $* 1>&2
        echo usage: `basename $0` '[-a] [-b] [-c] 
            [file ...]' 1>&2
        exit 1
    }
    
    
    while :
    do
        case "$1" in
        -a|-A) echo you picked A;;
        -b|-B) echo you picked B;;
        -c|-C) echo you picked C;;
        -*) usage "bad argument $1";;
        *) break;;
        esac
        shift
    done
    
    0 讨论(0)
  • 2020-12-31 11:43

    Using getopt or getopts is the better solution. But to answer your immediate question, $@ is all of your arguments, so -h -c, which doesn't match any of the single-argument patterns in your case statement. You would still need to iterate over your arguments like so

    for arg in "$@"; do
        case $arg in
           ....
        esac
    done
    
    0 讨论(0)
  • 2020-12-31 12:04

    to parse the positional arguments like ... $1 , just use $1 in the case stmt and then at the end ... use shift to pust the 2nd arg to $1 and likewise .

    also i would put the case stmt in a while loop or better a fxn so that i can run it twice for the two options or the number of options ..........

    $# will let you know how many options/arguments were there .

    0 讨论(0)
提交回复
热议问题