(031) Linux之shell位置参数
十年运维系列之基础篇 - Linux
作者:曾林
版权:文章未经同意请勿转载
一、引言
之前我们一直没有涉及程序接收和处理命令行选项以及参数的能力。本章节将讲述允许程序访问命令行内容的shell功能。
二、访问命令行
shell提供了一组名为位置参数的变量,用于储存命令行中的关键字,这些变量分别命令为0~9。可以通过以下方法展示这些变量。
1 #!/bin/bash 2 3 # posit-param: script to view command line parameters 4 5 echo " 6 \$0 = $0 7 \$1 = $1 8 \$2 = $2 9 \$3 = $3 10 \$4 = $4 11 \$5 = $5 12 \$6 = $6 13 \$7 = $7 14 \$8 = $8 15 \$9 = $9 16 "
这个简单的脚本展示了从变量$0到$9的值。在没有任何命令行参数的情形下执行此脚本结果如下所示:
即便没有提供任何实参,变量$0总是会储存有命令行显示的第一项数据,也就是所执行程序所在的路径名。现在让我们看看,看一下提供实参情形下的程序执行结果。
注意,使用参数扩展技术,用户实际可以获取多于9个的参数。为标明一个大于9的数字,将数字用大括号括起来,例如${10}, ${11}, ${888}等。
三、确定实参的数目
shell还提供了变量$#以给出命令行参数的数目。如下代码所示:
#!/bin/bash # posit-param: script to view command line parameters echo "Number of arguments: $#" echo " \$0 = $0 \$1 = $1 \$2 = $2 \$3 = $3 \$4 = $4 \$5 = $5 \$6 = $6 \$7 = $7 \$8 = $8 \$9 = $9 "
以上程序运行结果如下所示:
四、shift——处理大量的实参
但是如果给程序提供大量的实参会发生什么呢?如下所示:
在本例中,通配符“*”扩展为26个实参。怎么样才可以处理这么多参数呢?shell提供了一种略显笨拙的处理方法。每次执行shift命令后,所有参数的值均“下移一位”。实际上,通过shift命令我们就可以只处理一个参数($0之外的一个参数,$0值恒定)而完成全部程序任务。如下程序:
#!/bin/bash # shift.sh: script to display all arguments count=1 while [[ $# > 0 ]]; do echo "Argument $count = $1" count=$((count + 1)) shift done
每当执行一次shift命令时,变量$2的值就赋值给$1,而$3的值则赋给变量$2,依次类推。变量$#的值同时减去1。故以上代码的执行结果如下图所示:
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。