目录
示列1:编写函数,实现打印绿色OK和红色FAILED 判断是否有参数,存在为Ok,不存在为FAILED
示列2:编写函数,实现判断是否无位置参数,如无参数,提示错误
示列5:将/etc/shadow文件的每一行作为元数赋值给数组
示列6:使用关联数组统计文件/etc/passwd中用户使用的不同类型shell的数量
一:函数
1.1 什么是函数
所谓函数是将一组功能相对独立的代码集中起来,从而形成一个代码块,这个代码可以相对独立的完成某个功能,同时函数名与函数体形成映射,也就是说用户定义了函数后可以使用函数名来完成调用函数体,使开发更加的方便,代码更加简洁。
1.2函数的语法
function 函数名() {
指令
return
}
简化写法1:
function 函数名 {
指令
return
}
简化写法2:
函数名() {
指令
return
}
1.3函数的调用
1.4 函数的返回值
首先用户可以用return的语句来返回某个数值 而这个数值的范围是0~255中的整数值,在函数中用户需要将返回的数据写入标准输出(stdout)通常这个操作一般使用echo命令来实现 然后将函数的执行结果赋值给一个变量
列如:
length()
{
str=$1
result=0
if [ "$1" != "" ];then #$1为函数第一个参数的值
result=${#str}
fi
echo "$result"
}
len=$(length "abcd12")
echo "the string's length is $len"
执行结果:返回字符串的长度
1.5使用案例
方法1(无返回值无参数)
online()
{
for i in {120..130};do
if ping -c 1 192.168.33.$i &>/dev/null
then
echo "192.168.33.$i is up"
else
echo "192.168.33.$i is unknown"
fi
done
}
online
方法二 :使用函数传参(有参数无返回值)
online()
{
if ping -c 1 $1 &>/dev/null
then
echo "$1 is up"
else
echo "$1 is unknown"
fi
}
for i in {120..130}
do
online 192.168.33.$i
done
方法三:使用函数返回值判断(有参数有返回值)
online()
{
if ping -c 1 $1 &>/dev/null
then
return 0
else
return 1
fi
}
for i in {120..130}
do
online 192.168.33.$i
if [ $? -eq 0 ];then
echo "192.168.33.$i is up"
else
echo "192.168.33.$i is unknown"
fi
done
1.6函数库文件
1)函数库文件的定义:
库文件的定义类似与脚本的编写 但是函数库文件只包括函数而脚本文件不但包括函数和变量的定义也包括代码(函数外可执行的代码,当脚本被载入时代码会被立即执行。
2)函数库的调用:
当库文件定义好后,用户就可以在执行程序中载入库文件,并且调用其中的函数,载入命令为“.”
语法为 . filename
其中filename为函数库的名称,库文件可以使用相对路径也可以使用绝对路径 ,另外 圆点和库文件之间有空格
1.7递归函数
递归函数就是反复 的调用其自身,每调用一次就进入新一层的循环,即是调用者也是被调用者
示列:
根据用户输入的数值计算阶乘
fact()
{
local n="$1" #如果在函数内部没有使用local关键字进行修饰 那么函数的变量也会成为全局变量
if [ "$n" -eq 0 ]
then
result=1
else
let "m=n-1"
fact "$m"
let "result=$n * $?"
fi
return $result
}
fact "$1"
echo "Factorial of $1 is $?"
二:数组
2.1定义数组
方法一:用小括号将变量值括起来赋值给数组,每个变量之间用空格隔开
array = (value1 value2 value3 ... )