zoukankan      html  css  js  c++  java
  • 使用getopts处理输入参数

    在编写shell脚本中,需要输入参数,使用过程中,getopts更加方便。可以很好的处理用户输入的参数和参数值。

    参加如下一段脚本:

    #!/bin/bash
    while getopts ":a:p:c:e" opt
    do
        case $opt in
        a)
            echo "--- -a ---"
            echo $OPTARG;;
        p)
            echo "--- -p ---"
            echo $OPTARG;;
        c)
            echo "--- -c ---"
            echo $OPTARG;;
        e)
            echo "--- -e ---"
    echo $OPTARG;; ?) echo "-a -p -c -e" exit 1;; esac done
    OPTIND:getopts使用OPTIND作为索引,来处理下一个需要处理的参数,记录当前的状态。
    OPTARG:在上面的循环中,a,p,c三个参数后面各有一个冒号,冒号表示该输入的参数后面还有一个参数值,当getopts发现冒号后,会处理用户输入的参数值,这个参数值被保存在OPTARG中。
    OPTSTRING:也就是上例中的 :a:p:c:e,getopts需要处理的参数。注意,最前面的冒号“:”用于指定getopts工作于silent mode,在silent模式下,当用户输入的参数不满足OPTSTRING时,不会讲illegal option这样的错误信息打印出来,使代码看起来更加专业。如果想要工作在verbose模式下,可以去掉最前面的冒号。
    OPTSTRING后面没有冒号,则可以输入参数也可以不输入参数,但是如果输入参数,OPTARG也不会保存参数的值。
    如上脚本执行结果如下:
    linux-UMLhEm:/home/test/shell # ./option.sh -e
    --- -e ---
    
    linux-UMLhEm:/home/test/shell # ./option.sh -e abc
    --- -e ---
    
    linux-UMLhEm:/home/test/shell # ./option.sh -a test -p ok
    --- -a ---
    test
    --- -p ---
    ok
    linux-UMLhEm:/home/test/shell # ./option.sh -a test -p
    --- -a ---
    test
    -a -p -c -e
    linux-UMLhEm:/home/test/shell # ./option.sh -a
    -a -p -c -e
    linux-UMLhEm:/home/test/shell #
     
    如果在OPTSTRING中在字母前不加“:”改为
    while getopts "a:p:c:e" opt  
     
    则,执行结果为:

    linux-UMLhEm:/home/test/shell # ./option.sh -a
    ./option.sh: option requires an argument -- a
    -a -p -c -e
    linux-UMLhEm:/home/test/shell # ./option.sh -a test -p ok
    --- -a ---
    test
    --- -p ---
    ok
    linux-UMLhEm:/home/test/shell # ./option.sh -a test -p
    --- -a ---
    test
    ./option.sh: option requires an argument -- p
    -a -p -c -e

  • 相关阅读:
    tomcat配置
    java.net.ConnectException: Connection timed out: connect,java.net.ConnectException: Connection timed out: connect at java.net.DualStackPlainSocketImpl.waitForConnect
    Tomat 下载地址
    Gradle的依赖方式——Lombok在Gradle中的正确配置姿势 本文来源:码农网 本文链接:https://www.codercto.com/a/70161.html
    mssql 那表语句
    监控系统搭建
    vue 子组件触发父组件方法的两种方式
    css margin边界叠加问题详谈
    sticky footer
    JS的构造函数
  • 原文地址:https://www.cnblogs.com/xingmuxin/p/8435542.html
Copyright © 2011-2022 走看看