深入理解Linux Shell参数解析 (linux shell参数解析)

Linux Shell是Linux系统命令行界面下的一种解释器,通过Shell可以执行Linux系统内置的许多命令,完成对系统的各种操作,同时还可以编写Shell脚本进行批处理等。在Shell命令行输入命令时,可以通过参数来控制命令行的执行,参数可以是单个字符,也可以是多个字符组成的字符串。在本文中,我们将的知识,为您介绍Shell参数的基本概念、参数类型、参数传递方式、参数解析等方面的知识。

一、Shell参数的基本概念

参数是程序运行时从程序外部传入的一种数据,是Shell命令行执行程序时控制程序执行的手段。Shell参数一般由连字符’-‘紧跟着单个字符或者多个字符组成的字符串组成,每一个参数之间都可以用空格分隔来区分。通常情况下,参数的顺序不同会导致命令的执行结果不同,因此,在命令行输入参数时,需要按照一定的顺序进行输入。

二、Shell参数的类型

Shell参数一般分为短参数和长参数两种类型。

1、短参数

短参数是指由一个字符组成的参数,使用时一般在字符前面添加一个连字符 ‘-‘。短参数可以单独出现,也可以与其他参数组合使用。

例如:

-c 命令中的-c就是短参数。

2、长参数

长参数是指由多个字符组成的参数,使用时一般在字符前面添加两个连字符 ‘–‘,用来区分短参数。长参数的命名规则一般采用单词或单词的缩写来命名,多个单词之间一般采用’-‘或’_’连接。长参数一般可以接受附加参数。

例如:

–config-file filename 命令中的–config-file filename就是长参数。

三、参数传递方式

Shell命令在执行时,参数可以通过三种方式进行传递:

1、位置参数

位置参数是指在命令行输入参数时,在命令和参数之间用空格或者空白字符隔开的部分。位置参数以$0-$9的形式进行标识,其中$0表示命令本身,$1-$9表示位置参数。

例如:

lscmd file1 file2 命令中,位置参数$0表示lscmd命令,$1表示file1,$2表示file2。

2、环境变量

环境变量是指在Shell中定义的一些特殊变量,用来保存某些参数信息,例如PATH、USER等。这些环境变量在执行命令时,可以通过环境变量传递给命令进行使用。

例如:

$USER表示当前用户的用户名。

3、标准输入输出

标准输入输出是指Shell命令执行时,输入的数据来源和输出的数据去向。输入通常需要从标准输入stdin中读取,输出通常需要输出到标准输出stdout中。标准输入输出也可以通过重定向进行更改,将输入和输出分别重定向到文件或其他设备中。

例如:

cat file1file2 > file3命令中,将file1和file2的内容输出到file3中。

四、参数解析

参数解析是命令行解释器解释和处理参数的过程。在Linux Shell中,参数解析是通过 getopt() 或者getopt_long() 来实现的。

1、getopt()

getopt() 是最简单的参数解析函数,它只能解析短参数,不能解析长参数。getopt() 的使用方法如下:

int getopt(int argc,char *const argv[],const char *optstring);

参数argc 表示命令行中参数的个数; argv[] 表示参数的列表; optstring 表示以冒号(:)开头的表示需要附加参数的短选项字符,没有冒号表示不需要附加参数。

2、getopt_long()

getopt_long() 是可以解析短参数和长参数的参数解析函数,它相比 getopt() 更为灵活。getopt_long() 的使用方法如下:

int getopt_long(int argc,char *const argv[],const char *optstring,const struct option *longopts,int*longindex)

参数argc 表示命令行中参数的个数;argv[] 表示参数的列表;optstring 表示以冒号(:)开头的表示需要附加参数的短选项字符,没有冒号表示不需要附加参数;longopts 表示长选项的结构体数组,每个元素包含选项名(name)、选项类型(flag)和选项的取值(val)等三部分;longindex 表示长选项在长选项数组中的下标。

参数解析是Shell命令行执行的重要步骤之一,了解参数解析以及getopt() 和 getopt_long() 的使用方法,可以帮助我们更加高效地控制命令行的使用和批量处理。

相关问题拓展阅读:

linux中设计一个shell脚本程序可以接受命令行输入的参数执行相应的菜单命令

echo “”

echo “1、命令1”

echo “贺洞尘2、命颤迹令2”

echo “3、命令3”

echo “”

echo “请输入要执行的菜单命令(1/2/3):”

read com

case $com in

1)

命禅禅令1

;;

2)

命令2

;;

3)

命令3

;;

*)

echo “输入命令错误”

;;

之所以用到命令行参数,关键在于shell脚本需要与运行脚本的人员进行交互。

bash shell提供了命令行参数添加在命令后面的数据值)、命令行选项修改命令行为的单字符值)和直接读取键盘输入。

1、命令行参数

向shell脚本传递数据的最基本方式是使用命令行参数。

1)读取参数

读取输入的参数的变量为位置参数,位置参数通过标准数字表示,

其中$0为程序名称,$1为之一个参数,$2为第二个参数,依次类推,直到$9为第九个参数。

shell脚本自动将命令行参数赋值给各个位置变量。

同时输入多个参数可以是数值也可以是字符串)时,必须使用空格分隔要想在参数值中包含空格,就必须使用单引号或双引号)

当参数多于9个后,必须在shell脚本内使用大括号将变量括起来,如${10}。从而可以使用任意个参数。

2)读取程序名称

传递给变量$0的字符串实际上是程序的路径根据调用方法决定是相对还是绝对路径)。

使用basename命令可以去掉路径前缀,只获得程序名称名字中不 可以有空格)。

3)测试脚本

当脚本认为应该包含参数,却实际上没有数据时,就会出错。

好的方法是对参数进行检查来保证使用参数前确实存在数据,可以使用-n参数来检查。

例子:if then .. else .. fi

2、特殊的参数变量

用于跟踪命令行参数

1)参数计数

使用特殊变量$#测试执行脚本时包含的命令行参数个数。脚本中任何位置都可以 使用$#

例子:if 即可测试参数个数

可以使用${!#}来返回最后一个命令行参数当无参数时,$#为0,而${!#}为程序名)

2)获取所有数据

变量$*将命令行中提供的所有参数作为一个单词处理,它将多个参数看成 一个参数。

变量$@将命令行中提供的所有参数作为同一个字符串中的多个单词处理。 允许对其中的值进行迭代一般使用for),分隔开不同参数

3、移位

shift命令能够改变命令行参数的相对位置。默 认将每个参数变量左移一个位置变量$0不变,把$1丢弃,注意不可以恢复了!)

在不清楚参数数目情况下,这是一个迭代参数的好办法。

可以为shift提供一个参数,来实现多位移变化。

4、处理选项

选项是由破折号引导的单个字母,用于更改命令的行为。

1,找出选项

1)处理简单选项

可以使用处理命令行参数相同的方法处理选项,抽取时使用case语句进行判断是否符合选项格式。

2)从参数中分离选项

同时使用选项和参数时,可以使用–指示选项列表的结束。发现–后,shell就知道后面的是普通参数了,停止使用case处理选项。

3)处理带值的选项

选项后紧跟参数值,一种方法是在case中对应选项后使用shift和读后一位参数的方法处理。更好的方法如 下:

2,使用getopt命令

getopt命令在处理选项和参数时非常方便。它对参数进行重新组 织,以便于解析

1)命令格式

getopt可以接受任森余意形此察滚式的选项和参数列表,并自动将它们转换为适当的格式。

命令格式为: getopt options optstring parameters

选项字符串(opstring)用于定义命令行中的有效选项字母,以及哪些选项字母需要参数值。

2)脚本中使用getopt

需要使用set命令将现有的命令行选项和参数替换为getopt命令生成的 格式化形式。

需要将原始脚本命令行参数送给getopt命令,然后将getopt命令输出送给set命令,如下:set – `getopts –q ab:cd “$@”`

但是getopt命令不能没猜很好的处理带有空格的参数值,它将空格解析为参数分隔符,而不是将双引号引起来的两个 值合并成一个参数。解决办法如下:

3)更高级的getopts命令

getopts命令顺序的对现有的shell参数变量进行处理,每调用一次,只处理命令中检测到的参数中的一个。处理完所有参数后,以大于0的退出 状态退出。

非常适宜于在循环中解析所有命令行参数

格式为: getopts optstring variable

$optarg包含需要参数值的选项要使用的值,$optind包含getopts停止处理时在参数列表中的位置。

注意:当getopts处理时,会将选项前的-去掉,所以对应的case中不需要破折号。

好的特性:

1)可以在参数值中包含空格

2)选项字母和参数值中间可以没有空格

3)将在命令行中找到的未定义的选项都绑定为单一的输出——问号

5、标准化选项

有一些字母选项具有标准含义。更好按照标准含义定义选项意义

-a –c –d –e –f –h –i –l –n –o –q –r –s –v- x –y

6、获取用户输入

当需要在执行过程中获得执行脚本人员的输入,使用read命令

1)基本读取

read命令接受标准输入或其他文件描述符输入。读入后将数据放入 一个标准变量中。

-p 允许在read命令行中直接指定一个提示。

可以指定多个变量,也可以不指定将放置在reply环境变量中)

2)计时

使用-t指定一个计时器,计时数满还未输入,read返回一个非0的退出状态。

使用-n指定输入的字符个数,输入达到预定数目时,就自动结束输入

3)默读

使用-s使输入不显示在终端例如输入密码)

4)读取文件

最常用的方法是使用cat命令,并通过管道传给包含read的while语句。

linux shell参数解析的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于linux shell参数解析,深入理解Linux Shell参数解析,linux中设计一个shell脚本程序可以接受命令行输入的参数执行相应的菜单命令的信息别忘了在本站进行查找喔。


数据运维技术 » 深入理解Linux Shell参数解析 (linux shell参数解析)