关闭

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

标签: linuxshellgetoptsoptargoptind
30830人阅读 评论(0) 收藏 举报
分类:

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模式下获取参数的方法》

0
0
查看评论
发表评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场

Shell中使用getopt、getopts命令

1. 命令的格式 getopt命令可以接受一系列任意形式的命令行选项和参数,并自动将它们转换成适当的格式。格式如下: getopt optstring parameters optstring...
  • wh211212
  • wh211212
  • 2016-12-19 23:22
  • 1614

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

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

getopt/getopts:Bash中命令行选项/参数处理

1 echo foo="this is foo var" echo ${foo}s #this is foo vars 2 文件路径 basename /usr/local/share/doc/foo...
  • breeze_life
  • breeze_life
  • 2013-08-16 11:43
  • 6035

linux getopts命令行参数处理

getopts 的设计目标是在循环中运行,每次执行循环,getopts 就检查下一个命令行参数,并判断它是否合法。即检查参数是否以 - 开头,后面跟一个包含在 options 中的字母。如果是,就把匹...
  • tianwei7518
  • tianwei7518
  • 2015-04-24 09:11
  • 544

使用getopts获取命令行参数

常用的参数 $#  参数的个数 $* 所有的参数 $@ 所有的参数 shift来处理参数 一般两种形式 ============================ while [ -n $#...
  • ruiqingzheng
  • ruiqingzheng
  • 2013-03-14 23:36
  • 361

Linux getopts --处理命令行参数,并校验有效选项

getopts 命令 用途 处理命令行参数,并校验有效选项。 语法 getopts 选项字符串 名称 [ 参数 ...] 描述 getopts 命令是 Korn/POSIX...
  • mosesmo1989
  • mosesmo1989
  • 2016-04-08 10:07
  • 199

Getopts获取shell脚本命令行参数

getopts可以编写脚本,使控制多个命令行参数更加容易。g e t o p t s用于形成命令行处理标  准形式。原则上讲,脚本应具有确认带有多个选项的命令文件标准格式的能力。    20.2...
  • mosesmo1989
  • mosesmo1989
  • 2016-04-08 11:32
  • 285

格式化命令行参数getopt和getopts的使用

getopt: parse command options 格式:getopt options optstring parameters optstring定义了命令行有效的选项字母,还定义了哪些选...
  • RHEL_admin
  • RHEL_admin
  • 2014-06-30 00:05
  • 592

Getopts获取shell脚本命令行参数

g e t o p t s可以编写脚本,使控制多个命令行参数更加容易。g e t o p t s用于形成命令行处理标  准形式。原则上讲,脚本应具有确认带有多个选项的命令文件标准格式的能力。  ...
  • wufangna
  • wufangna
  • 2014-08-19 10:37
  • 1429

Shell中使用getopt、getopts命令

1. 命令的格式 getopt命令可以接受一系列任意形式的命令行选项和参数,并自动将它们转换成适当的格式。格式如下: getopt optstring parameters optstring...
  • wh211212
  • wh211212
  • 2016-12-19 23:22
  • 1614
    微博
    微信公众号
    微信分享公众平台-破晓领域
    破晓领域
    微信号:fdipzone-idea
    名称:破晓领域

    个人资料
    • 访问:7716545次
    • 积分:46001
    • 等级:
    • 排名:第78名
    • 原创:295篇
    • 转载:24篇
    • 译文:0篇
    • 评论:508条
    博客专栏
    最新评论