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

参加如下一段脚本:

#!/bin/bash
while getopts ":a:p:c:e" opt
docase $opt ina)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

转载于:https://www.cnblogs.com/xingmuxin/p/8435542.html

使用getopts处理输入参数相关推荐

  1. SQL Server存储过程输入参数使用表值

    在2008之前如果我们想要将表作为输入参数传递给SQL Server存储过程使比较困难的,可能需要很多的逻辑处理将这些表数据作为字符串或者XML传入. 在2008中提供了表值参数.使用表值参数,可以不 ...

  2. 终端输入参数:argparse和sys.argv[]的用法

    argparse的用法 fun_test.py的代码: #!/usr/bin/env python # -*- encoding: utf-8 -*- """ @Intr ...

  3. 调用script方法_自己撸一个代码生成器输入参数和方法

    在[CodeSmith快速入门之一:初次接触CodeSmith]中,我们实现了最简单的模板,但是模板中的内容无法由用户的输入决定. 假定你女朋友要你在新年的时候说10次"I LOVE YOU ...

  4. 检查Bash Shell脚本中输入参数的存在

    我需要检查输入参数的存在. 我有以下脚本 if [ "$1" -gt "-1" ]then echo hi fi 我懂了 [: : integer expres ...

  5. 一、静态工厂的第四个优点是返回对象的类可以根据输入参数的不同而不同。...

    静态工厂的第四个优点是返回对象的类可以根据输入参数的不同而不同. 声明的返回类型的任何子类都是允许的. 返回对象的类也可以随每次发布而不同. EnumSet类(条目 36)没有公共构造方法,只有静态工 ...

  6. shell脚本判断输入参数个数

    if [ $# != 1 ] then   echo "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"   echo "!!         ...

  7. std输入参数太多matlab,错误使用函数,输入参数太多怎么解决

    请各位大神帮帮忙,实在想不明白问题在哪.我想用二分法求零点,待求函数为HS(t)的调用函数.代码如下 主程序是这个: %二分法迭代求解思路 %初始化 clc cla clear all close a ...

  8. 输入参数_MyBatis中的输入/输出参数

    MyBatis的输入/输出参数 输入参数 MyBatis中的Dao映射配置中的parameter属性表示输入参数类型,它对应Dao接口方法的参数类型有三种: 基本数据类型:如int.char等 < ...

  9. 未能使用“Csc”任务的输入参数初始化该任务

    今天.NetCore2.1版本,建立Asp.net Core web应用程序项目时,报以下错误: 未能使用"Csc"任务的输入参数初始化该任务. "Csc"任务 ...

最新文章

  1. 新一代垃圾回收器ZGC的探索与实践
  2. IO Streams:缓冲流
  3. 图像语义分割:U-Net网络和PSP网络
  4. 蒋涛,CSDN创始人,俺村的骄傲
  5. 深度学习(08)-- Residual Network (ResNet)
  6. 25 MM配置-采购-无物料主数据的项目输入帮助
  7. 高性能HTTP加速器Varnish(性能调优篇)
  8. Linux 信息的各种查询(系统发行版本、内核版本、系统位数)
  9. Angular4---环境配置安装
  10. 使用Java实现简单串口通信
  11. 设计模式:Builder模式
  12. 围观了张一鸣近10年的微博,我整理了这231条干货
  13. 东北大学计算机学院教授,东北大学之计算机系
  14. 为什么说程序员做外包没前途?
  15. 关于vue项目表单验证身份证号的正则表达式
  16. vue3实现表格单元格可编辑
  17. MyEclipse快捷键Alt+Shift+s详解
  18. Java之------常用的设计模式
  19. 你当前无权访问该文件夹 解决你当前无权访问该文件夹拒绝你访问该文件夹
  20. java visibility_CSS visibility属性

热门文章

  1. 《C++面向对象高效编程(第2版)》——导读
  2. Bootstrap——优秀的开源前端框架
  3. Cisco Catalyst交换机密码恢复策略
  4. 模仿github网页前端HTML,仿github404页面特效
  5. modelsim 自动化 独立仿真vivado ip核工程
  6. java自定义sql查询插件,Mybatis插件plugin应用测试,替换查询sql
  7. mysql加索引优化sql_MySQL添加索引优化SQL
  8. 没有找到mysql。sock_linux系统安装mysql数据库
  9. python读取txt文件并画图
  10. 华为云携手秒拍,云+AI助力短视频加速发展