zoukankan      html  css  js  c++  java
  • 脚本命令行传入的参数

    版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
    本文链接:https://blog.csdn.net/sinat_36521655/article/details/79296181

    方式一:$0,$1,$2..

    采用$0,$1,$2..等方式获取脚本命令行传入的参数,值得注意的是,$0获取到的是脚本路径以及脚本名,后面按顺序获取参数,当参数超过10个时(包括10个),需要使用${10},${11}....才能获取到参数,但是一般很少会超过10个参数的情况。

    1.1 示例:新建一个test.sh的文件

        #!/bin/bash
        echo "脚本$0"
        echo "第一个参数$1"
        echo "第二个参数$2"

    在shell中执行脚本,结果如下

        $ ./test.sh 1 2
         
        #shell中将会输出:
        脚本./test.sh
        第一个参数1
        第二个参数2

    1.2 下面是参数超过10个的情况,在test.sh文件写入

        #!/bin/bash
        echo "脚本名$0"
        echo "第一个参数$1"
        echo "第二个参数$2"
        echo "第三个参数$3"
        echo "第四个参数$4"
        ……
        echo "第十个参数$10"
        echo "第十个参数${10}"

    在shell中执行脚本,结果如下

        $ ./test.sh a b c d e f g h i j
         
        #shell中将会输出:
        脚本名./test.sh
        第一个参数a
        第二个参数b
        第三个参数c
        第四个参数d
        第五个参数e
        第六个参数f
        第七个参数g
        第八个参数h
        第九个参数i
        第十个参数a0
        第十个参数j

    可以看到${10}正确读取到了第十个参数,而$10被分成$1读取到第一个参数a然后拼接字符串0,于是输出a0。

    优点:获取参数更容易,执行脚本时需要的输入少

    缺点:必须按照顺序输入参数,如果中间漏写则参数对应就会错误

    方式二:getopts

    语法格式:getopts [option[:]] [DESCPRITION] VARIABLE
    option:表示为某个脚本可以使用的选项
    ":":如果某个选项(option)后面出现了冒号(":"),则表示这个选项后面可以接参数(即一段描述信息DESCPRITION)
    VARIABLE:表示将某个选项保存在变量VARIABLE中

    2.1 示例:同样新建一个test.sh文件

        while getopts ":a:b:c:" opt
        do
            case $opt in
                a)
                echo "参数a的值$OPTARG"
                ;;
                b)
                echo "参数b的值$OPTARG"
                ;;
                c)
                echo "参数c的值$OPTARG"
                ;;
                ?)
                echo "未知参数"
                exit 1;;
            esac
        done

    用一个while循环加case分支获取不同参数,:a:b:c相当于定义参数的变量名,有时候可能会有未知参数,所以增加一个?的分支。

    在shell中执行脚本,结果如下

        $ ./test.sh -a 1 -b 2 -c 3
         
        #在shell中的输出
        参数a的值1
        参数b的值2
        参数c的值3

        $ ./test.sh -a 1 -c 3
         
        #在shell中的输出
        参数a的值1
        参数c的值3

        $ ./test.sh -a 1 -c 3 -d 4
         
        #在shell中的输出
        参数a的值1
        参数c的值3
        未知参数

    优点:由于使用了-a加参数值的方式进行一一匹配,所以不会参数匹配错误,同时也可以缺省参数,并不会导致参数错误,同时也便于后期参数的扩展和移植

    缺点:脚本执行时参数需要的输入会增多

    总结:推荐使用getopts的方式进行参数传递

  • 相关阅读:
    MongoDB学习笔记~Mongo集群和副本集
    知方可补不足~写了一个计算数据表占用存储空间的方法
    MongoDB学习笔记~为IMongoRepository接口添加分页取集合的方法
    MongoDB学习笔记~索引提高查询效率
    MongoDB学习笔记~客户端命令行的使用
    Android动画效果translate、scale、alpha、rotate详解
    CacheHelper工具类的使用
    [置顶] vs2008 编译adb 支持4.2 android 系统(增加push 命令的进度)
    如何在cocos2d项目中enable ARC
    敏捷开发用户故事系列之十一:CSDN博客用户故事分析
  • 原文地址:https://www.cnblogs.com/wanghaiyang1930/p/11411342.html
Copyright © 2011-2022 走看看