精华内容
下载资源
问答
  • getopt

    2020-02-09 23:01:17
    getopt

    getopt
    用在shell脚本中,实现自定义长短选项。

    #!/usr/bin/env bash
    
    paras=$(getopt -o a,b:,c:: -l help,in:,out:: -n "$0" -- "$@")
    
    #将$@的所有内容按照getopt给出的条件匹配并复制给paras
    选项:
    -o         #表示短选项
    	a      #表示a不带参数
    	b:     #表示b必须带参数
    	c::    #表示c的参数可选
    -l         #表示长选项
    	help   #表示help不带参数
    	in:    #表示in必须带参数
    	out::  #表示out的参数可选
    -n name    #表示参数解析错误时,以name为脚本名报错
    --         #表示getopt结束位置,分割开$@
    
    “::” 参数可选的选项,短选项和参数之间不能有空格,如下:
    [root@server ~]# ./test.sh -a -b 1 -c 2 --in=3 --out=4 --help
    -a -b 1 -c 2 --in=3 --out=4 --help
    -a -b '1' -c '' --in '3' --out '4' --help -- '2'
    [root@server ~]# ./test.sh -a -b 1 -c2 --in=3 --out=4 --help
    -a -b 1 -c2 --in=3 --out=4 --help
    -a -b '1' -c '2' --in '3' --out '4' --help --
    
    输错没有选项和不带参数的选项时:
    ./test.sh: invalid option -- 'f'
    ./test.sh: option requires an argument -- 'b'
    -f -a 1 -b
    -a -- '1'
    
    #!/bin/bash
    
    paras=$(getopt -o a,b:,c:: -l in:,out::,help -n $0 -- $@)
    
    echo $@
    echo $paras
    eval set -- "$paras"  #将paras字符串里面的内容重新复制给$1、$2……
    echo $@
    echo "-----------------------------"
    echo $4
    echo $5
    echo $6
    echo "-----------------------------"
    while true;
    do
        case "$1" in
            -a) echo $1; shift;;
            -b) echo $2; shift 2;;
            -c) echo $2; shift 2;;
            --in) echo $2; shift 2;;
            --out) echo $2; shift 2;;
            --help) echo $1; shift;;
            --) shift; echo $@; break;;
            *) exit;;
        esac
    done
    echo "-----------------------------"
    echo $@
    
    [root@server ~]# ./test.sh -a -b 1 -c 2 --in=3 --out=4 --help aa bb cc
    -a -b 1 -c 2 --in=3 --out=4 --help aa bb cc
    -a -b '1' -c '' --in '3' --out '4' --help -- '2' 'aa' 'bb' 'cc'
    -a -b 1  -c    --in 3  --out 4  --help -- 2 aa bb cc
    -----------------------------
    -c
    
    --in
    -----------------------------
    -a
    1
    
    3
    4
    --help
    2 aa bb cc
    -----------------------------
    2 aa bb cc
    
    展开全文

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 20,676
精华内容 8,270
关键字:

getopt