Linux 使用getopts命令获取命令行参数

原创 2017年07月30日 13:20:47

Linux getopts命令用于获取命令行中的参数

调用格式:

getopts option_string variable

 
参数说明:
option_string 选项名称
variable 选项的值
 
选项之间使用冒号:分隔,也可以直接连接, : 表示选项后面有传值。
当getopts命令发现冒号后,会从命令行该选项后读取该值。如该值存在,将保存在特殊的变量OPTARG中。

当option_string用:开头,getopts会区分invalid option错误和miss option argument错误。

invalid option时, varname会被设成?
miss option argument时,varname会被设成:

如果option_string不用:开头,invalid option错误和miss option argument错误都会使varname被设成?。


getopts包含两个内置变量,OPTARGOPTIND

OPTARG 保存选项后的参数值
OPTIND 表示命令行下一个选项或参数的索引

例子1,使用getopts命令获取参数

#!/bin/bash

while getopts a:b:c:d opts; do
    case $opts in
        a) a=$OPTARG ;;
        b) b=$OPTARG ;;
        c) c=$OPTARG ;;
        d) d=$OPTARG ;;
        ?) ;;
    esac
done

echo "a=$a"
echo "b=$b"
echo "c=$c"
echo "d=$d"

exit 0

执行输出

./test.sh -a 1 -b 2 -c 3 -d 4
a=1
b=2
c=3
d=

option_string a:b:c:d
a,b,c后都有:,d后没有:
所以可以获取到a,b,c的值

例子2,option_string前加:

上例中,如果a,b,c任意一个没有传值,将会提示出错。例如 -c 不传值。

./test.sh -a 1 -b 2 -c
./test.sh: option requires an argument -- c
a=1
b=2
c=
d=

我们在option_string前加上:,则可以屏蔽这个错误。

#!/bin/bash

while getopts :a:b:c:d opts; do
    case $opts in
        a) a=$OPTARG ;;
        b) b=$OPTARG ;;
        c) c=$OPTARG ;;
        d) d=$OPTARG ;;
        ?) ;;
    esac
done

echo "a=$a"
echo "b=$b"
echo "c=$c"
echo "d=$d"

exit 0

执行输出

./test.sh -a 1 -b 2 -c
a=1
b=2
c=
d=

在option_string前加上:,可以屏蔽缺失传值的错误,但如果缺失的是前面选项的值,那么获取到的值将会错误。

例如缺失a的传值,命令会把-a后的-b作为了-a的值,导致错误。

./test.sh -a -b 2 -c 3
a=-b
b=
c=
d=

因此使用getopts命令时,对于没有传值的选项,选项名称也不要加入命令行中。
例如a不传值,则-a不要加入命令行。

./test.sh -b 2 -c 3
a=
b=2
c=3
d=



Linux的getopts命令并不支持多个字符组合的参数名称(longopts),如需要获取long opts参数,可以使用php的getopt方法实现,参考:《php cli模式下获取参数的方法》

版权声明:本文为博主原创文章,未经博主允许不得转载。如需转载可私信或关注公众号fdipzone-idea与我联系。 https://blog.csdn.net/fdipzone/article/details/76377294

Linux应用与ubuntu基本操作

-
  • 1970年01月01日 08:00

shell getopts用法详解

获取UNIX类型的选项:   unix有一个优点就是标准UNIX命令在执行时都具有相同的命令行格式:   command -options parameters   如果在执行She...
  • u012703795
  • u012703795
  • 2015-05-28 15:59:38
  • 4388

linux shell读取命令行参数

#!/bin/bash # handle the command's parameters # shell's name is test cli="test" while [ $# -gt 0...
  • yizezhong
  • yizezhong
  • 2017-11-23 19:25:36
  • 368

Linux下获取命令行参数——Getopt

Linux下获取命令行参数——Getopt ...
  • lemon520
  • lemon520
  • 2006-02-10 12:02:00
  • 1350

Linux 程序设计学习笔记----命令行参数处理

在使用linux时,与windows最大的不同应该就是经常使用命令行laijie
  • hu1020935219
  • hu1020935219
  • 2014-07-24 20:59:29
  • 5422

使用 getopt 处理命令行长参数(长选项)

getopt命令并不是bash的内建命令,它是由util-linux包提供的外部命令。 getopt 与 getopts 的区别 getopts 是 shell 内建命令, get...
  • u011641885
  • u011641885
  • 2015-08-11 23:00:11
  • 2758

最简单的shell输入参数语句demo--getopts

#!/bin/bash while getopts b:ms OPTION do case $OPTION in b) echo "birthday: $OPTARG...
  • lincyang
  • lincyang
  • 2013-08-27 06:44:02
  • 1761

linux下如何获取进程的id和命令行参数

liunx上获取进程ID和启动参数的命令主要有以下两个:如ps –ef | grep mysql //查看mysql的进程;查看后台运行的进程; 查看用户的UID、GID及所归属的用户组--ps |...
  • u012414037
  • u012414037
  • 2014-05-08 16:47:07
  • 903

c/c++ 获取命令行参数示例

# a.out -d /data/ -i /tmp/a.txt -c 1 int main(int argc, char* argv[]) { //参数变量初始化 string type...
  • tsxw24
  • tsxw24
  • 2013-12-12 14:50:09
  • 10000

Linux c 开发 - 命令行参数和getopt方法的使用细节

命令行参数 在c语言的入口函数main方法中,可以添加两个参数:argc和argv。通过这两个参数,我们就可以在可执行文件执行的时候将自定义的参数传递到程序中。 看一个例子: #include ...
  • initphp
  • initphp
  • 2015-03-10 21:52:47
  • 2461
收藏助手
不良信息举报
您举报文章:Linux 使用getopts命令获取命令行参数
举报原因:
原因补充:

(最多只允许输入30个字)