linux shell命令行选项与参数用法详解--getopt

Linux命令行参数详解:从基础到高级应用 命令行参数是Linux系统与程序交互的核心机制,通过特定的语法规则传递控制信息和操作对象。其工作原理基于Unix设计哲学,将选项(option)与参数(argument)通过`-`或`--`前缀进行区分,支持短选项、长选项、组合选项等多种形式。这种设计在系统管理、脚本编写和自动化任务中展现出极高的技术价值,既能实现精确控制,又能通过管道和重定向构建复杂工作流。典型应用场景包括文件操作(如`ls -l`)、文本处理(如`grep -i`)和编译构建(如`gcc -O2`)。掌握命令行参数规范对Shell脚本开 阅读详情
本文介绍了linux shell中使用命令行选项与命令行参数的方法,在bash中,可以用以下三种方式来处理命令

行参数,每种方式都有自己的应用场景
问题描述:在linux shell中如何处理tail -n 10 access.log这样的命令行选项?
在bash中,可以用以下三种方式来处理命令行参数,每种方式都有自己的应用场景。
1,直接处理,依次对$1,$2,...,$n进行解析,分别手工处理;
2,getopts来处理,单个字符选项的情况(如:-n 10 -f file.txt等选项);
3,getopt,可以处理单个字符选项,也可以处理长选项long-option(如:--prefix=/home等)。
总结:小脚本手工处理即可,getopts能处理绝大多数的情况,getopt较复杂、功能也更强大。
1,直接手工处理位置参数
必须要要知道几个变量,
代码如下:
    *    $0 :即命令本身,相当于c/c++中的argv[0]
    *    $1 :第一个参数.
    *    $2, $3, $4 ... :第2、3、4个参数,依次类推。
    *    $#  参数的个数,不包括命令本身
    *    $@ :参数本身的列表,也不包括命令本身
    *    $* :和$@相同,但"$*" 和 "$@"(加引号)并不同,"$*"将所有的参数解释成一个字符串,而"$@"


是一个参数数组。

手工处理方式能满足多数的简单需求,配合shift使用也能构造出强大的功能,但处理复杂选项时建议用下面

的两种方法。
例子,(getargs.sh):
代码如下:

#!/bin/bash
if [ $# -lt 1 ]; then
    echo "error.. need args"
    exit 1
fi
echo "commond is $0"
echo "args are:"
for arg in "$@"
do
    echo $arg
done


运行命令:
代码如下:
./getargs.sh 11 22 cc
commond is ./getargs.sh
args are:
11
22
cc


2,getopts (shell内置命令)
处理命令行参数是一个相似而又复杂的事情,为此,c提供了getopt/getopt_long等函数,c++的boost提供了

options库,在shell中,处理此事的是getopts和getopt。
getopts/getopt的区别,getopt是个外部binary文件,而getopts是shell builtin。

代码如下:

[root@jbxue ~]$ type getopt
getopt is /usr/bin/getopt
[root@jbxue ~]$ type getopts
getopts is a shell builtin

getopts不能直接处理长的选项(如:--prefix=/home等)
关于getopts的使用方法,可以man bash  搜索getopts
getopts有两个参数,第一个参数是一个字符串,包括字符和“:”,每一个字符都是一个有效的选项,如果

字符后面带有“:”,表示这个字符有自己的参数。getopts从命令中获取这些参数,并且删去了“-”,并

将其赋值在第二个参数中,如果带有自己参数,这个参数赋值在“optarg”中。提供getopts的shell内置了

optarg这个变变,getopts修改了这个变量。
这里变量$optarg存储相应选项的参数,而$optind总是存储原始$*中下一个要处理的元素位置。
while getopts ":a:bc" opt  #第一个冒号表示忽略错误;字符后面的冒号表示该选项必须有自己的参数
例子,(getopts.sh):

代码如下:

echo $*
while getopts ":a:bc" opt
do
        case $opt in
                a ) echo $optarg
                    echo $optind;;
                b ) echo "b $optind";;
                c ) echo "c $optind";;
                ? ) echo "error"
                    exit 1;;
        esac
done
echo $optind
shift $(($optind - 1))
#通过shift $(($optind - 1))的处理,$*中就只保留了除去选项内容的参数,可以在其后进行正常的shell

编程处理了。
echo $0
echo $*




执行命令:

复制代码 代码如下:

./getopts.sh -a 11 -b -c
-a 11 -b -c
11
3
b 4
c 5
5
./getopts.sh


3,getopt(一个外部工具)
具体用用法可以 man getopt
#-o表示短选项,两个冒号表示该选项有一个可选参数,可选参数必须紧贴选项,如-carg 而不能是-c arg
#--long表示长选项
例子,(getopt.sh):

代码如下:

#!/bin/bash
# a small example program for using the new getopt(1) program.
# this program will only work with bash(1)
# an similar program using the tcsh(1) script. language can be found
# as parse.tcsh
# example input and output (from the bash prompt):
# ./parse.bash -a par1 'another arg' --c-long 'wow!*\?' -cmore -b " very long "
# option a
# option c, no argument
# option c, argument `more'
# option b, argument ` very long '
# remaining arguments:
# --> `par1'
# --> `another arg'
# --> `wow!*\?'
# note that we use `"$@"' to let each command-line parameter expand to a
# separate word. the quotes around `$@' are essential!
# we need temp as the `eval set --' would nuke the return value of getopt.
#-o表示短选项,两个冒号表示该选项有一个可选参数,可选参数必须紧贴选项
#如-carg 而不能是-c arg
#--long表示长选项
#"$@"在上面解释过
# -n:出错时的信息
# -- :举一个例子比较好理解:
#我们要创建一个名字为 "-f"的目录你会怎么办?
# mkdir -f #不成功,因为-f会被mkdir当作选项来解析,这时就可以使用
# mkdir -- -f 这样-f就不会被作为选项。
temp=`getopt -o ab:c:: --long a-long,b-long:,c-long:: \
     -n 'example.bash' -- "$@"`
if [ $? != 0 ] ; then echo "terminating..." >&2 ; exit 1 ; fi
# note the quotes around `$temp': they are essential!
#set 会重新排列参数的顺序,也就是改变$1,$2...$n的值,这些值在getopt中重新排列过了
eval set -- "$temp"
#经过getopt的处理,下面处理具体选项。
while true ; do
        case "$1" in
                -a|--a-long) echo "option a" ; shift ;;
                -b|--b-long) echo "option b, argument \`$2'" ; shift 2 ;;
                -c|--c-long)
                        # c has an optional argument. as we are in quoted mode,
                        # an empty parameter will be generated if its optional
                        # argument is not found.
                        case "$2" in
                                "") echo "option c, no argument"; shift 2 ;;
                                *)  echo "option c, argument \`$2'" ; shift 2 ;;
                        esac ;;
                --) shift ; break ;;
                *) echo "internal error!" ; exit 1 ;;
        esac
done
echo "remaining arguments:"
for arg do
   echo '--> '"\`$arg'" ;
done


运行命令:
代码如下:

./getopt.sh --b-long abc -a -c33 remain
option b, argument `abc'
option a
option c, argument `33'
remaining arguments:
--> `remain'


linux-解析命令行选项getopt_long用法 在程序中难免需要使用命令行选项,可以选择自己解析命令行选项,但是有现成的,何必再造轮子。下面介绍使用getopt_long解析命令行选项。 程序中主要使用: 短选项 长选项 是否需要参数 备注 -v --version 否 查询版本号 -n --name 是(用户名) 指定使用者 -d --debug 否 是 阅读详情

相关推荐

Marin说PCB之LPDDR5的布线注意事项--03

这个规则中是把每个字节中的WCK to RDQS 以及DM / DQ to WCK等长规则都加到了DM / DQ这个等长规则中去了,因为芯片手册上的设计要求中的DM / DQ这个group的等长误差是+-50MIL, WCK to RDQS的等长group的规则是62.5MIL,DM / DQ to WCK等长group的规则是相对松一些是150MIL。其实上面的等长规则还是建少了一些的,例如手册上要求的每个channel的WCK0:1,WCK2:3等长误差在+-488MIL,这个规则建议还是补上去吧。

weixin_45223454的博客 1229

getopts命令

Normal 0 7.8 磅 0 2 false false false MicrosoftInternetExplorer4 <object class

缘起宇轩阁 1559

【论文导读】ICDM2018|SASRec---基于自注意力机制的序列推荐(召回)

前言本次分享2018年发表在ICDM上的论文----「Self-Attentive Sequential Recommendation」。主要是应用self-attention机制来做一...

Blank_Space 8032

Shell命令 getopts/getopt用法详解 命令行参数

Shell命令行参数解析getopts/getopt用法详解 在Linux bash中,可以用以下三中方式解析命令行参数: 直接处理:使用$1、$2、$3… 进行解析 getopts:短选项的情况,例如:-n 10 -f file.txt getopt:处理短选项或者长选项,例如:--perfix=/home等 1. 直接处理 Linux shell中常见的几种变量说明: $0 #即命令本身,相当于c/c++中的argv[0] $1 #第一个参数 $2, $3, $4 ... #第2、3、4

二进制杯莫停的博客 1万+

【python数据挖掘课程】二十八.基于LDA和pyLDAvis的主题挖掘及可视化分析

这是《Python数据挖掘课程》系列文章,前面很多文章都讲解了数据挖掘、机器学习,这篇文章主要讲解LDA和pyLDAvis算法,同时讲解如何读取CSV文本内容进行主题挖掘及可视化展示。文章比较基础,希望对你有所帮助,提供些思路,也是自己教学的内容。推荐大家购买作者新书《Python网络数据爬取及分析从入门到精通(分析篇)》,如果文章中存在错误或不足之处,还请海涵。 目录: 一.显示结果及安装 二.LDA主题挖掘 三.pyLDAvis可视化分析 四.小结

杨秀璋的专栏 1万+

北斗导航 | 卡尔曼滤波与因子图优化对比(附图优化matlab代码)

- 历史数据利用:因子图通过滑动窗口保留历史状态,优化时联合多帧数据;卡尔曼滤波仅依赖当前和上一帧状态 。 - 迭代优化:因子图通过多次迭代逼近最优解,卡尔曼滤波仅单次更新 。 - 误差抑制:因子图的多次线性化可有效抑制非线性误差(如GNSS伪距观测的非线性) 。

尘世冰封的专栏 1299

Linux shell命令行参数解析getopts/getopt用法详解

在Linux bash中,可以用以下三种方式解析命令行参数:直接处理:使用$1,$2,$3…进行解析getopts: 单个字符选项的情况,例如:-n 10 -f file.txt等选项getopt:处理单个字符或长选项(long-option),例如:–prefix=/home等经验:小型脚本可以直接处理,大多数情况使用getopts,getopt的功能更加强大。

学亮编程手记 3195

1. SAP Business Application Studio 里创建一个基于 CAP 模型的最简单的 OData 服务

本文基于 SAP Cloud Application Programming 编程模型的 OData 服务开发教程的第一步,简述了 SAP Business Technology Platform 里 Business Application Studio 开发工具的打开方式,创建 Dev Space 以及 CAP 项目的创建步骤,以及如何通过 schema.cds 和 service.cds 分别创建 OData 模型和 OData 服务,最后通过 ports preview 打开 OData 服务预览页

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 1797

Linux下Shell脚本命令行参数:getopt、getopts用法

简介 我们通常在编写shell脚本时简单的方式是通过参数的方式来取到我们想要的参数,如: #!/bin/bash SYSCODE=$1 APP_NAME=$2 MODE_NAME=$3 但是这有一个问题,就是参数的位置是固定的,倘若用户在调用脚本时参数位置不固定那么就会出现问题,这种方法一般只适用于一两个参数的情况,我们可以使用更高阶的方案,在Linux中提供了两个命令:getopt与getopts,getopts是getopt更高阶的命令,我们先从最简单的介绍,先从getopt开始介绍 ..

17岁boy的博客 5973

在 SAP S/4HANA 分析模型中添加 Measures,Calculated、Restricted、Currency Conversion 与 Unit Conversion 的建模思路

摘要: SAP S/4HANA分析查询建模中,度量(measure)的加工层级是关键难点,涉及聚合时机、币种/单位语义、过滤上下文等复杂因素。度量不仅是数字字段,还需处理计算口径(Calculated Measures)、上下文绑定(Restricted Measures)和单位转换等问题。Calculated Measures适合派生指标(如毛利率),需注意聚合前后计算差异;Restricted Measures通过固化过滤条件(如区分实际/计划金额)确保业务语义一致性。建模时应将业务逻辑下沉到分析模型层

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 1022

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

getopts 可选参数_linux shell命令行选项与参数用法详解--getopt

本文介绍了linux shell中使用命令行选项与命令行参数的方法,在bash中,可以用以下三种方式来处理命令行参数,每种方式都有自己的应用场景问题描述:在linux shell中如何处理tail -n 10 access.log这样的命令行选项?在bash中,可以用以下三种方式来处理命令行参数,每种方式都有自己的应用场景。1,直接处理,依次对$1,$2,...,$n进行解析,分别手工处理;2,g...

weixin_36371924的博客 758

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

getopts 可选参数_linux shell命令行选项与参数用法详解--getopts、getopt

在bash中,可以用以下三种方式来处理命令行参数:直接处理:使用$1,$2,...,$n进行解析getopts:单个字符选项的情况(如:-n 10 -f file.txt等选项)getopt:可以处理单个字符选项,也可以处理长选项long-option(如:--prefix=/home等)总结:小脚本直接处理即可,getopts能处理绝大多数的情况,getopt较复杂、功能也更强大。1、直接处理使...

weixin_39624980的博客 400

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

Linux命令学习之处理命令行参数函数getopt

介绍getopt函数基本使用

CharlesYan的博客 2105

linux shell 命令 参数,Bash Shell中命令行选项/参数处理

getopt: parse command options格式:getopt options optstring parametersoptstring定义了命令行有效的选项字母,还定义了哪些选项字母需要参数值。在每个需要参数值的选项字母后加一个冒号。如果要去掉错误消息的话,用-q参数。可以用set命令使getopt命令处理后的命令行选项和参数。set命令用双破折号可以命令行参数替换成set命令的...

weixin_28813357的博客 420

Shell脚本命令行解析:getopt命令用法与实战

在Shell脚本开发中,命令行参数解析是绕不开的基础技能。当脚本需要支持短选项、长选项、带参选项时,手写解析容易陷入边界混乱。getopt命令作为Linux下参数解析的标准工具,通过选项字符串声明规则,将原始参数规范化为“选项在前、位置参数在后”的结构,同时支持选项合并、长选项匹配与合法性校验。将getopt输出配合eval set重建位置参数,可大幅提升脚本的健壮性与可维护性。在自动化运维、部署工具等场景中,getopt能从容应对复杂命令行输入,避免参数歧义。本文深入解析getopt的语法细节、安全边界以

weixin_30431445的博客 276

SECTION 16 处理用户输入

处理用户输入

u010230019的博客 323

Linux命令行参数解析与应用实战指南

命令行参数是操作系统与应用程序交互的核心机制,通过预定义语法结构实现高效指令传递。其工作原理涉及Shell分词、变量扩展和通配符处理等关键环节,直接影响脚本执行的准确性与安全性。在Linux环境中,参数解析技术(如getopt/getopts)和特殊变量($@/$*)的合理运用,能显著提升系统管理效率。典型应用场景包括批量文件处理、自动化运维以及CLI工具开发,其中正确处理带空格参数和防范参数注入尤为重要。通过掌握ls、rm等基础命令的参数规范,结合Python argparse等现代解析库,开发者可以构建

weixin_33491377的博客 273

Shellx学习

1.Linux下getopt()函数的简单使用 https://www.cnblogs.com/qingergege/p/5914218.html

jhb1021821368的博客 457

【Linux】Shell命令 getopts/getopt用法详解

Shell命令行参数解析getopts/getopt用法详解 在Linux bash中,可以用以下三种方式解析命令行参数: 直接处理:使用$1,$2,$3…进行解析 getopts: 单个字符选项的情况,例如:-n 10 -f file.txt等选项 getopt:处理单个字符或长选项(long-option),例如:–prefix=/home等 经验:小型脚本可以直接处理,大多数情况使用get...

小哲的博客 3万+

15.bash shell中自定义命令行选项与getopt/getopts

欢迎访问个人网络日志🌹🌹🌹🌹。

机器人视觉感知 1718

设计shell脚本选项:getopt

设计shell脚本选项:getopt man 1 getopt翻译:https://www.cnblogs.com/f-ck-need-u/p/9757959.html 写shell脚本的时候,通过while、case、shift来设计脚本的命令行选项是一件比较麻烦的事,因为Unix命令行的选项和参数自由度很高,支持短选项和长选项,参数可能是可选的,选项顺序可能是无所谓的,等等。 bash下的getopt命令可以解析命令行的选项和参数,将散乱、自由的命令行选项和参数进行改造,得到一个完整的、规范化的参数列

wanghailan1818的博客 2006

Shell命令行参数解析getopt的使用范例

#!/bin/sh # # Shell script to demonstrate use of Linux getopt command for parsing command options. # - Built-in getopts can only handle one-character options so getopt command is necessary # Supporting functions, alphabetized... # Parse the command line

Laurence的技术博客 1862
上一篇: 总结iOS 8和Xcode 6的各种坑
下一篇: xcodebuild和xcrun实现自动打包iOS应用程序
cbbbc
博客等级 码龄15年 609粉丝 37原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值