• 例子:

    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. 2018-2019-2 20175217 实验二《Java面向对象程序设计》实验报告

    一.实验报告封面 课程:Java程序设计 班级:1752班 姓名:吴一凡 学号:20175217 指导教师:娄嘉鹏 实验日期:2019年4月15日 实验时间:--- 实验序号:实验二 实验名称:Jav ...

  2. 试试Linux下的ip命令,ifconfig已经过时了

    linux的ip命令和ifconfig类似,但前者功能更强大,并旨在取代后者.使用ip命令,只需一个命令,你就能很轻松地执行一些网络管理任务.ifconfig是net-tools中已被废弃使用的一个命 ...

  3. MySQL操作(备份很重要)

    文档一: --修改用户密码的命令 mysqladmin -uroot -proot123 password mysql123 --登录mysql数据库的命令 mysql -uroot -proot12 ...

  4. Fum uc M-R ko P's R

    Milr-Rabin Dodod Avlo se \(n-1\) e \(u\cdot 2^t\). hen goch'n Toizz lme \([1,n-1]\) e \(l\). cak fe ...

  5. 纯手工搭建VS 2017(社区 免费版)离线安装包

    不知不觉中,史上功能最强大的Visual Studio 2017版本发于美国时间2017年3月8日正式在发布了,但是由于版本更新速度加快和与第三方工具包集成的原因,微软研发团队没有为这个版本提供离线下 ...

  6. Centos7 启动指定docker容器报错

    今天做docker实验时,把docker镜像pull下后,启动报如下错误: 错误信息:WARNING: IPv4 forwarding is disabled. Networking will not ...

  7. 用redis实现分布式锁,秒杀案例(转)

    分布式锁的简单实现代码: 需要的jar包: jedis-2.9.0.jar. commons-pool2-2.4.2.jar import java.util.List; import java.ut ...

  8. React多层级表单

    因项目需要封装的组件,组件库使用的是Ant Design 用到了 Form组件 , 布局组件,表单控件 ,如果没有使用Ant Design,可以用rc-form代替,需要对组件中使用的表单控件和布局进 ...

  9. vivado2016.1下载程序出错:End of startup status: LOW

    现象 使用JTAG下载程序,发现刚开始下载就出现了End of startup status: LOW错误.但能检测到芯片,证明JTAG没烧毁. 流程 前几次下载都没有问题,然后就有问题了. (1)怀 ...

  10. centos7下关闭sshd的tcp6

    问题现象 不算问题,就是偶然发现新装好的系统默认的sshd服务启动后的监听项有2个,如下图: 想着自己已经明明关闭了ipv6,竟然还起这tcp6...,强迫症犯了,尝试关闭它,百度一眼几乎没有,记录一 ...