Shell函数参数

向函数传递参数
在Shell中,调用函数时可以向其传递参数。在函数体内部,通过 $n 的形式来获取参数的值,例如,$1表示第一个参数,$2表示第二个参数…

示例1:带有参数的函数

#!/bin/bash

#定义函数
funWithParam() {
  echo "First paramter is $1"
  echo "Second paramter is $2"
  echo "Third paramter is $3"
  echo "Fourth paramter is $4"
  echo "Fifth paramter is $5"
  echo "Sixth paramter is $6"
  echo "Seventh paramter is $7"
  echo "Eighth paramter is $8"
  echo "Ninth paramter is $9"
  echo "Tenth paramter is ${10}"
  echo "Eleventh paramter is ${11}"
  echo "Amount of the paramter is $#" #参数个数
  echo "String of the paramter is $*" #传递函数的所有参数
  echo "String of the paramter is $@" #传递函数的所有参数
}

#调用函数,并传递参数
funWithParam 1 2 3 4 5 6 7 8 9 22 25

脚本运行结果如下:

First paramter is 1
Second paramter is 2
Third paramter is 3
Fourth paramter is 4
Fifth paramter is 5
Sixth paramter is 6
Seventh paramter is 7
Eighth paramter is 8
Ninth paramter is 9
Tenth paramter is 22
Eleventh paramter is 25
Amount of the paramter is 11
String of the paramter is 1 2 3 4 5 6 7 8 9 22 25
String of the paramter is 1 2 3 4 5 6 7 8 9 22 25

注意,$10 不能获取第十个参数,获取第十个参数需要${10}。当n>=10时,需要使用${n}来获取参数。

特殊变量做参数处理说明:

特殊变量 说明
$# 传递函数的参数个数
$* 显示所有传递给函数的参数
$@ 与$*相同,显示所有传递给函数的参数
$? 函数的返回值

示例2:传递间接参数

#!/bin/bash

#用于显示参数值
ind_func() {
  echo "$1"
}

#设置间接参数
parameter=ind_arg
ind_arg=hello

#显示直接的参数
ind_func "$parameter"

#显示间接参数
ind_func "${!parameter}"

echo "********************"

#改变ind_arg值后的情况
ind_arg=World
ind_func "$parameter"
ind_func "${!parameter}"

脚本运行结果如下:

ind_arg
hello
********************
ind_arg
World

脚本示例说明:
首先将变量ind_arg赋值给parameter,同时将变量hello赋值给ind_arg,然后通过调用函数ind_func输出直接参数parameter的值,再次调用ind_arg使用变量${!parameter}输出parameter的间接参数值。接着改变ind_arg的值为world,可以看出,parameter变量的间接参数值也随之发生了改变。
Shell脚本编程使用间接变量需要使用变量${!parameter}来实现。