函数
在所有的程序设计类语言中,可以说函数的学习是必不可少的,在一门编程类语言当中学会使用函数,也是一个程序员最基本的知识储备,用好函数可以极大的简洁程序代码,方便阅读和理解,通常我们把函数看作是方法(解决某个问题的方法),一个函数具有其本身的功能,其功能对应解决某个问题,使用时直接调用。
1.函数可以用来干什么
-
-
可以把相同程序段作为一个函数,这样做可以减小代码量,提高使用速率。
-
-
-
增加程序段的可读性,提高管理效率。
-
-
-
将一个程序段定义成一个函数还可以实现程序功能模块化,相同程序段的重复使用。
-
2.shell函数基本语法
function 函数名() {
指令
return
}
案例:
#! /bin/bash
#定义一个函数fun(),打印hello world
function fun(){
echo "hello world"
}
fun
结果:
[root@bogon ~]# vim fun1.sh
[root@bogon ~]# chmod +x fun1.sh
[root@bogon ~]# ./fun1.sh
hello world
也可以写成:注:写成次形式时要注意函数名和“{”间有空格(可以是一个或多个)
function 函数名 {
指令
return
}
案例
#! /bin/bash
#定义一个函数fun(),打印hello world
function fun {
echo "hello world"
}
fun
结果:
[root@bogon ~]# vim fun2.sh
[root@bogon ~]# chmod +x fun2.sh
[root@bogon ~]# ./fun2.sh
hello world
错误列子:
#! /bin/bash
#定义一个函数fun(),打印hello world
function fun{
echo "hello world"
}
fun
结果:
[root@bogon ~]# vim fun2.sh
[root@bogon ~]# ./fun2.sh
./fun1.sh:行5: 未预期的符号 `echo' 附近有语法错误
./fun1.sh:行5: ` echo "hello world"'
还可以写成:
函数名() {
指令
return
}
案例
#! /bin/bash
#定义一个函数fun(),打印hello world
fun() {
echo "hello world"
}
fun
结果:
[root@bogon ~]# vim fun3.sh
[root@bogon ~]# ./fun3.sh
hello world
3.函数的调用
调用的基本语法
函数名 参数1 参数2 ...
-
-
调用函数:
-
-
-
(1)不带参数的函数调用 函数名
-
-
-
(2)带参数的函数执行方法: 函数名 参数
-
案例
#! /bin/bash
#定义一个函数fun(),打印hello world
fun() {
echo "$1"
}
fun "你好"
结果:
[root@bogon ~]# vim fun3.sh
[root@bogon ~]# chmod +x fun3.sh
[root@bogon ~]# ./fun3.sh
你好
#! /bin/bash
#定义一个函数fun(),打印hello world
fun() {
echo "$1,$2"
}
fun "你好" "世界"
结果:
[root@bogon ~]# vim fun4.sh
[root@bogon ~]# chmod +x fun4.sh
[root@bogon ~]# ./fun4.sh
你好,世界
4.函数经典案例
编写一个shell脚本,判定192.168.150.200-192.168.150.254之间那些主机在线。
不带参数
#! /bin/bash
ping() {
for i in {200..254}
do
if ping -c 1 -w 1 192.168.150.$i &>/dve/null
then
echo "192.168.0.$i is pong."
else
echo "192.168.0.$i is not pong."
fi
done
}
ping
使用函数传参(有参数没有返回值)
#! /bin/bash
ping() {
if ping -c 1 -W 0.1 $1 &>/dev/null
then
echo "$1 is pong."
else
echo "$1 is down."
fi
}
for i in {200..254}
do
ping 192.168.150.$i
done
使用函数返回值判断(没有参数,有返回值)
#! /bin/bash
ping() {
if ping -c 1 -W 0.1 $1 &>/dev/null
then
return 0
else
return 5
fi
}
for i in {200..254}
do
ping 192.168.150.$i
done
使用函数返回值判断(有参数,有返回值)
#! /bin/bash
ping() {
if ping -c 1 -W 0.1 $1 &>/dev/null
then
return 0
else
return 5
fi
}
for i in {200..254}
do
ping 192.168.150.$i
if [ $? -eq 0 ]
then
echo "192.168.150.$i is pong"
else
echo "192.168.150.$i is down"
fi
done