getopts 可选参数_getopts获得选项参数-程序员宅基地

技术标签: getopts 可选参数  

在写sh脚本的时候,常常需要运行时输入一些数据。之前已经知道用基本的$*,执行的情况,大概就是$0 $1 $2

$3……

那么,那些系统命令里的参数又是怎么做出来的呢?我们自己的脚本如何搞出来$0

-$1的效果呢?这就是getopts的作用了。举例如下:

#!/bin/bash

echo

"OPTIND starts at $OPTIND"

while getopts ":pq:" optname

do

case "$optname" in

"p")

echo "Option $optname is

specified"

;;

"q")

echo "Option $optname has

value $OPTARG"

;;

"?")

echo "Unknown option

$OPTARG"

;;

":")

echo "No argument value for

option $OPTARG"

;;

*)

#

Should not occur

echo "Unknown

error while processing options"

;;

esac

echo "OPTIND is now

$OPTIND"

done

在使用getopts命令的时候,shell会自动产生两个变量OPTIND和OPTARG。

OPTIND初始值为1,其含义是下一个待处理的参数的索引。只要存在,getopts命令返回true,所以一般getopts命令使用while循环;

OPTARG是当getopts获取到其期望的参数后存入的位置。而如果不在其期望内,则$optname被设为?并将该意外值存入OPTARG;如果$optname需要拥有具体设置值而实际却没有,则$optname被设为:并将丢失设置值的optname存入OPTARG;

对于$optname,可以用后标:来表示是否需要值;而前标:则表示是否开启静默模式。

案例分析:

getopts optstring varname [arg

...]

optstring  option字符串,会逐个匹配

varname    每次匹配成功的选项

arg        参数列表,没写时它会取命令行参数列表

$OPTIND    特殊变量,option

index,会逐个递增

$OPTARG    特殊变量,option

argument,不同情况下有不同的值

细则1:当optstring以”:“开头时,getopts会区分invalid option错误和miss option

argument错误。

invalid

option时,varname会被设成?,$OPTARG是出问题的option;

miss

option

argument时,varname会被设成:,$OPTARG是出问题的option。

如果optstring不以”:“开头,invalid

option错误和miss option

argument错误都会使

varname被设成?,$OPTARG是出问题的option。

细则2:当optstring中的字母跟”:“时(比如下面例子中的t),表明该option可接参数,参数(argument)放在$OPTARG中;

如果缺参数,且optstring是以”:“开头,则varname的值会是:,$OPTARG是该option,

否则varname的值是?,$OPTARG是该option。(参照细则1)

简单的sample:#!/bin/bash

SKIPBLANKS=

TMPDIR=/tmp

CASE=lower

while getopts :bt:u arg

do

case $arg in

b) SKIPBLANKS=TRUE

echo "If skip blanks? $SKIPBLANKS"

;;

t) if [ -d "$OPTARG" ]

then

TMPDIR=$OPTARG

echo "Temp dir is $TMPDIR."

else

echo "$0: $OPTARG is not a

directory." >&2

exit 1

fi

;;

u) CASE=upper

echo "Case sensitivity is $CASE."

;;

:) echo "$0: Must supply an argument to -$OPTARG." >&2

exit 1

;;

\?) echo "Invalid option -$OPTARG ignored." >&2

;;

esac

done

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

智能推荐

git submodule 子模块的基本使用_git包含子模块引用仓库,拉代码只拉到主仓库部分-程序员宅基地

文章浏览阅读886次。使用了submodule后,若不主动更新,项目会一直使用固定版本的submodule模块,需手动更新(若是在go或者其他有包管理的项目中,建议还是使用开发语言工具去做这种类似的第三方包管理会比较方便。_git包含子模块引用仓库,拉代码只拉到主仓库部分

MFC 更换背景图片的方法_mfc中鼠标按下时更换背景图片-程序员宅基地

文章浏览阅读4.8k次。void CRobotClientDlg::OnPaint() { if (IsIconic()) { CPaintDC dc(this); // device context for painting SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0); // Center icon in client r_mfc中鼠标按下时更换背景图片

java获得当前时间一小时前的时间_java获取当前时间前1h-程序员宅基地

文章浏览阅读2.1w次,点赞4次,收藏9次。Calendar calendar = Calendar.getInstance(); calendar.setTime(new Date()); calendar.set(Calendar.HOUR, calendar.get(Calendar.HOUR) - 1);// 让日期加1 System.out.println(calendar.get(Calendar.D_java获取当前时间前1h

生成模型在计算机视觉、自然语言处理、推荐系统中的应用和研究_父母基因怎么组合-程序员宅基地

文章浏览阅读1.1k次。随着计算机的飞速发展,人工智能技术的逐渐成熟,越来越多的人开始关注这个新兴的领域,开始开发出新的产品和服务。在这个信息爆炸的时代,数据量的呈几何级增长,需要人们对海量数据的分析、处理和决策,而机器学习就是人工智能的一个重要组成部分。从传统的统计学习到深度学习(如卷积神经网络CNN),人工智能技术不断的进步,已经引起了很大的社会影响。在这个过程中,生成模型是一个非常重要的工具,它可以用来帮助理解复杂的数据集。通过训练一个生成模型,可以从父亲的基因中产生出一个系列可能的孩子的基因序列,_父母基因怎么组合

virtuoso 后仿 ADE L error_后仿真 referencing an undefined model or subcircuit-程序员宅基地

文章浏览阅读470次。解决办法:在model library添加dio_tt的model。原因:model library 没设置二极管的model。ADE后仿时出现error。_后仿真 referencing an undefined model or subcircuit

深度学习笔记——pytorch实现双向GRU(BiGRU)-程序员宅基地

文章浏览阅读1k次,点赞12次,收藏16次。参考视频。_双向gru

随便推点

安装mujoco报错:distutils.errors.DistutilsExecError: command ‘gcc‘ failed with exit status 1_mujoco/_callbacks.cpython-36m-x86_64-linux-gnu.so-程序员宅基地

文章浏览阅读5.6k次。  整个的报错记录如下:>>> import mujoco_pyrunning build_extbuilding 'mujoco_py.cymj' extensiongcc -pthread -B /home/hzq/anaconda3/envs/TianChi/compiler_compat -Wl,--sysroot=/ -Wsign-compare -DNDEBUG -g -fwrapv -O3 -Wall -fPIC -Ianaconda3/envs/TianChi/li_mujoco/_callbacks.cpython-36m-x86_64-linux-gnu.so

Retrofit:使用【Retrofit】优雅地对接第三方接口_lianjiatech-程序员宅基地

文章浏览阅读1.6k次。我是 ABin-阿斌:写一生代码,创一世佳话,筑一览芳华。 如果小伙伴们觉得我的文章不错,记得一键三连,感谢~文章目录前言前言_lianjiatech

面试阿里 P6,过关斩将直通 2 面,结果 3 面找了个架构师来吊打我_阿里p6二面-程序员宅基地

文章浏览阅读984次,点赞2次,收藏4次。前言人人都有大厂梦,对于程序员来说,BAT 为首的一线互联网公司肯定是自己的心仪对象,毕竟能到这些大厂工作,不仅薪资高待遇好,而且能力技术都能够得到提升,最关键的是还能够给自己镀上一层金,让人瞻仰。同样的,小编的好朋友的个人目标也是阿里,但之前一直在一家小公司,一呆就是好几年,现在通过不断学习和实践,提升了自己很多,也有了信心来阿里挑战。下面,就是朋友分享的这次面试阿里 P6 的一些经历和心得。阿里 P6 岗面试经历这次阿里的面试经历实朋友说实在是在太紧张+刺激+尴尬了,面试前还自信_阿里p6二面

开关稳压器详解(四)-Buck降压型开关稳压器自举电路_自举驱动的buck电路-程序员宅基地

文章浏览阅读8.9k次,点赞12次,收藏121次。在Buck开关中,常使用N-MOS管作为功率开关管。相比于P-MOS,N-MOS具有导通电阻低价格便宜且流过电流较大等优势。在同步结构中对于开关管的使用一般有两种方式:上管为P-MOS,下管为N-MOS;无需外部自举电路上下管均为N-MOS;需要外部自举电路从上图可知,由于N-MOS导通条件是栅极电压比源极电压高。对于上管而言必须增加自举电路才能保证上管完全导通。下面就介绍下自举电路..._自举驱动的buck电路

YOLOv4 介绍及其模型优化方法-程序员宅基地

文章浏览阅读2.2k次。YOLOv4 介绍及其模型优化方法一、YOLOv4 介绍2020 年 4 月,YOLOv4 在悄无声息中重磅发布,在目标检测领域引起广泛的讨论。在 YOLO 系列的原作者 Joseph R..._yolo模型剪枝和蒸馏

Android Native Crash 收集(1)-程序员宅基地

文章浏览阅读617次,点赞27次,收藏21次。感觉现在好多人都在说什么安卓快凉了,工作越来越难找了。又是说什么程序员中年危机啥的,为啥我这年近30的老农根本没有这种感觉,反倒觉得那些贩卖焦虑的都是瞎j8扯谈。当然,职业危机意识确实是要有的,但根本没到那种草木皆兵的地步好吗?Android凉了都是弱者的借口和说辞。虽然 Android 没有前几年火热了,已经过去了会四大组件就能找到高薪职位的时代了。