• 例子:

    while getopts ":e:s:pd:l" arg;
    do
    case $arg in
    e)
    ghs_env=$OPTARG
    ;;
    s)
    ghs_service=$OPTARG
    ;;
    p)
    proxy=`sed '/^PROXY=/!d;s/.*=//' config.properties`
    ;;
    d)
    dir_path=$OPTARG
    ;;
    l)
    if [ -d "log" ]; then
    rm -r log
    mkdir log
    else
    mkdir log
    fi
    log_dir=$(cd `dirname $0`; pwd)/log
    ;;
    ?)
    echo "Usage: $(basename $0) [-e somevalue] [-s somevalue] [-p somevalue] [-d somevalue]" 1>&2
    exit 1
    ;;
    esac
    done
  • getopts有两个参数,第一个参数是一个字符串,包括字符和" : ", 每一个字符都是一个有效的选项,如果字符后面带有" : ", 表示这个字符有自己的参数。getopts从命令中获取这些参数,并且删去了" - ", 并将其赋值在第二个参数中,即"OPTARG"中,在例子中,$OPTARG存储相应选项的参数。

  • while getopts ":e:s:pd:l" arg;  这行代码中,第一个冒号表示忽略系统报错信息,使用自定义的报错信息;字符后面的冒号表示该选项必须自己的参数。

    • 第一个冒号存在时(自定义报错信息):

      1. 当指定的参数不存在时,variable设置为" : ", 对应的$OPTARG为此时的选项 (这个尚未搞明白是什么意思)

      2. 当指定的选项是带参数的而没有提供参数或是非法选项(指定的选项没有定义),variable设置为" ? ", 对应的$OPTARG为此时的选项

    • 第一个冒号不存在时(会按照系统的定义报错):

      1. 指定了非法选项(不存在的选项或者说是没有定义的选项),会报错:scriptname:illegal option — 选项

      2. 选项需要参数但没有指定,会报错:scriptname: option requires an argument –选项


    • 单个字符后面接一个冒号,表示选项必须自己的参数,参数可以紧跟选项后或者以空格隔开,该参数的指针赋给OPTARG

    • 单个字符后面接两个冒号表示该选项必须自己的参数且参数紧跟选项后不能以空格隔开(我试过,感觉有没有空格都可以,因此,我觉得如果要加参数,字符后只要写一个冒号就可以了),该参数的指针赋给OPTARG

shell脚本中关于getopts的使用方法的更多相关文章

  1. Shell脚本中让进程休眠的方法(sleep用法)

    有时候写Shell的脚本,用于顺序执行一系列的程序. 有些程序在停止之后并没能立即退出,就例如有一个 tomcat 挂了,就算是用 kill -9 命令也还没瞬间就结束掉. 这么如果 shell 还没 ...

  2. [转]Shell脚本中发送html邮件的方法

    <span "="">作为运维人员,免不了要编写一些监控脚本,并将监控结果及时的发送出来.那么通过邮件发送是比较常用的一种通知方式了.通常的,如果需要发送的内 ...

  3. shell脚本中8种字符串截取方法_转自脚本之家

    转自:http://www.jb51.net/article/56563.htm 参考:http://blog.csdn.net/taiyang1987912/article/details/3955 ...

  4. Shell脚本中判断输入参数个数的方法投稿:junjie 字体:[增加 减小] 类型:转载

    Shell脚本中判断输入参数个数的方法 投稿:junjie 字体:[增加 减小] 类型:转载   这篇文章主要介绍了Shell脚本中判断输入参数个数的方法,使用内置变量$#即可实现判断输入了多少个参数 ...

  5. ftp在shell脚本中的使用方法

    1. ftp自动登录批量下载文件. #####从ftp服务器上的/home/data 到 本地的/home/databackup#####!/bin/bashftp -n<<!open 1 ...

  6. Shell脚本中执行sql语句操作mysql的5种方法【转】

    对于自动化运维,诸如备份恢复之类的,DBA经常需要将SQL语句封装到shell脚本.本文描述了在Linux环境下mysql数据库中,shell脚本下调用sql语句的几种方法,供大家参考.对于脚本输出的 ...

  7. 学习Linux shell脚本中连接字符串的方法

    这篇文章主要介绍了Linux shell脚本中连接字符串的方法,如果想要在变量后面添加一个字符,可以用一下方法: 代码如下: $value1=home $value2=${value1}"= ...

  8. Shell脚本中调用另外一个脚本的方法

    (转载): 在Linux平台上开发,经常会在console(控制台)上执行另外一个脚本文件,经常用的方法有:./my.sh 或 source my.sh 或 . my.sh:这三种方法有什么不同呢?我 ...

  9. [转]Shell脚本中获取SELECT结果值的方法

    http://blog.itpub.net/13885898/viewspace-1670297/ 有时候我们可能会需要在Shell脚本中执行SELECT语句,并将结果赋值给一个变量,对于这样的情形, ...

随机推荐

  1. xcode10下,Build Phases下没有Embed Frameworks

    升级xcode10后发现,Build Phases下,找不到Embed Frameworks了,最后发现在General下,有一项“Embedded Binaries",可以在这里添加Fra ...

  2. JAVA如何利用Swiger获取Linux系统电脑配置相关信息

    最近开发java应用程序,涉及到获取Linux服务器相关配置的问题,特地网上搜寻了下,采用Swiger包可以直接获取,再次小结一下,以便于以后能方便使用,也便于其他童鞋们学习. 推荐大家参考链接:ht ...

  3. 【问题解决方案】ImportError: No module named 'pygal'

    <Python编程:从入门到实践>一书,第二个项目-可视化,第四节用到pygal 安装部分用 'python -m pip install pygal==1.7' 安装,但使用时仍然报错 ...

  4. linux环境下vim创建java文件,并编译运行

    一.前提 安装Java 二.创建工作目录并编辑java文件 三.编译 四.运行

  5. IntelliJ IDEA远程调试(Debug)Tomcat

    为什么需要这么做? 解决 在我本地是好的啊 这个世界性难题- 测试环境碰到问题,直接连上debug,不用再测试本地,再查看测试环境日志 遇到一些诡异的问题,日志是看不出端倪的 调试一些只能在测试环境执 ...

  6. TOP按钮

    TOP按钮 博客园页面添加返回顶部TOP按钮 进入网页管理->设置 在"页面定制CSS代码"中添加如下css样式,当然你可以改为自己喜欢的样式 此处可以将背景色backgro ...

  7. Xilinx FPGA引脚txt文件导入excel中

    需求 为了把xilinx FPGA的官方引脚文件txt转成excel文件(实际官网中有对应的csv文件就是excel文件了...) xilinx FPGA引脚地址:https://china.xili ...

  8. Python基础学习笔记4-28(持续更新)

    Python学习笔记 第一章 计算机基础 1.1 硬件 计算机基本的硬件由:CPU / 内存 / 主板 / 硬盘 / 网卡 / 显卡 等组成,只有硬件但硬件之间无法进行交流和通信.需要操作系统进行协调 ...

  9. CentOS 7 系统基础配置

    系统版本:CentOS 7.2.1511 Minimal 采用最小化系统安装,许多组件默认是不安装的,通过手工安装一些常用工具包,让系统用起来更顺手. 1.修改机器名: [root@centos7-m ...

  10. Curl请求慢

    背景原因:测试环境发现一个连接内网访问和外网访问延迟差别很大,内网访问很快.外网访问很慢.于是我们用curl来诊断问题所在的区域! 命令如下: 1 curl -o /dev/null -s -w %{ ...