shell脚本 自定义传入参数选项

来源:互联网 发布:免费手机安装窃听软件 编辑:程序博客网 时间:2024/05/22 16:52

在使用现有的如grep、awk等shell命令时,我们发现都会有一种形式,-r 参数,其实这种形式在我们自己编写的脚本中也可以定义

主要有三种方式处理命令行参数,

1、手工处理方式

2、getopts

3、getopt

1、手工处理方式:

用这种方式时,需要自己知道第几个参数对应的是什么变量,使用位置来取参数,如下所示:

<span style="font-family:SimSun;font-size:14px;">$0: 命令本身的名称$1: 第一个参数$2:依次类推,第2个参数$#:参数的个数,不包括命令本身的名称$@:参数列表,不包括命令本身的名称$*:和$@相同,但注意"$*"和"$@"并不同,“$*"将所有的参数解释成一个字符串,而"$@"是一个参数数组</span>
2、使用getopts,示例如下:

<span style="font-family:SimSun;font-size:14px;">while getopts :f:d:ck: OPTIONdo    case $OPTION in        f)                                   dir_str=$OPTARG            ;;        d)            date_time=$OPTARG            ;;        k)            key_word=$OPTARG        #$OPTARG为特殊变量,表示选项的具体参数            ;;        m)              whole_month=y            ;;        \?)                       #如果出现错误,则解析为?            echo "error params $OPTARG"            ;;    esacdone</span>
其中,$OPTARG表示的取传进来的值

while getopts后面,f后面跟着冒号:表示该参数f接收传入参数 即-f 参数, c后面没有跟着冒号,表示该参数c不接收传入参数 即输入-c 就表示c对应的变量为y(或者为n,看自己如何定义了)

3、使用getopt,示例如下:

<span style="font-family:SimSun;font-size:14px;">set -- `getopt acdhimwe:fo "$@"`                              #set -- 重新组织$1 等参数while  [ -n "$1" ]do    echo "\$1 is $1"    case $1 in        -a)            make_arch            ;;        -c)            make_clean            ;;        -d)            make_decoder            ;;        -h)            build_help            ;;        -i)            make_decoder_image            ;;        -m)            move_bin            ;;        -w)            build_welcom            ;;        --)            shift            break            ;;        -o)            echo "find -o option"            ;;        -f)            echo "find -f option"            ;;        -e)            echo "find -e option with param $2"            shift            ;;        *)            echo $1            echo "unknow option"    esac    shiftdone</span>
getopts与getopt的区别:

1. getopts是bash内建命令的, 而getopt是外部命令
2. getopts不支持长选项, 比如: --date
3. 在使用getopt的时候, 每处理完一个位置参数后都需要自己shift来跳到下一个位置, getopts只需要在最后使用shift $(($OPTIND - 1))来跳到parameter的位置。
4. 使用getopt时, 在命令行输入的位置参数是什么, 在getopt中需要保持原样, 比如 -t , 在getopt的case语句中也要使用-t,  而getopts中不要前面的-。
5. getopt往往需要跟set配合使用
6. getopt -o的选项注意一下

7. getopts 使用语法简单,getopt 使用语法较复杂

8. getopts 不会重排所有参数的顺序,getopt 会重排参数顺序

9. getopts 出现的目的是为了代替 getopt 较快捷的执行参数分析工作


0 0