(031) Linux之shell位置参数

十年运维系列之基础篇 - Linuxshell

做者:曾林 bash

联系:1494445739@qq.com运维

网站:www.jplatformx.com函数

版权:文章未经赞成请勿转载网站


1、引言

  以前咱们一直没有涉及程序接收和处理命令行选项以及参数的能力。本章节将讲述容许程序访问命令行内容的shell功能。spa

 

2、访问命令行

  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的值。在没有任何命令行参数的情形下执行此脚本结果以下所示:code

  即使没有提供任何实参,变量$0老是会储存有命令行显示的第一项数据,也就是所执行程序所在的路径名。如今让咱们看看,看一下提供实参情形下的程序执行结果。orm

  注意,使用参数扩展技术,用户实际能够获取多于9个的参数。为标明一个大于9的数字,将数字用大括号括起来,例如${10}, ${11}, ${888}等。blog

 

3、肯定实参的数目

  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
"

  以上程序运行结果以下所示:

 

4、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。故以上代码的执行结果以下图所示:

 

5、在shell函数中使用位置参数

  就像位置参数可用于向shell脚本传递参数同样,位置参数也可用于shell函数实参的传递,如如下脚本所示:

 1 file_info() {
 2     if [[ -e "$1" ]]; then
 3         echo "File Type:"
 4         file "$1"
 5         echo "File Status:"
 6         stat "$1"
 7     else
 8         echo "$FUNCNAME: usage: $FUNCNAME file" >&2 
 9         return 1
10     fi  
11 }

  如今,若是一个包含了file_info函数的脚本以一个文件名为实参调用file_info,则此实参就被传递给file_info函数。

  在这样的条件下,咱们就能够写出不少不只普通脚本可以使用,并且.bashrc文件也一样适用的有用的shell函数。

  此外,这里须要注意的是FUNCNAME的shell变量,shell自动更新FUNCNAME以追踪当前执行的shell函数。

相关文章
相关标签/搜索