函数的介绍
- Linux Shell中的函数和大多数编程语言中的函数一样
- 将相似的任务或代码封装到函数中,供其他地方调用
语法格式
格式1

格式2
1 2 3 4 5 6 7
| function name { command1 command2 ... conmandn }
|
如何使用函数
- 直接使用函数名调用,可以将其想象成Shell中的一条命令
- 函数内部可以直接使用参数$1、$…$n.
- 调用函数: function_ name $1 $2
案例–MySQL守护进程
需求描述:写一个监控mysql的桥本,如果mysql服务宕掉,则该脚本可以检测到并将进程启动,(守护进程)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| #!/bin/bash
this_pid=$$
while true do ps -ef | grep mysqld | grep -v grep | grep -v $this_pid &> /dev/null
if [ $? -eq 0 ];then echo "Mysql is runing well"
else systemctl start mysqld echo "Mysql is down, start it..."
fi
done
|
函数的传递参数
高级语言函数的定义
1 2 3 4 5 6 7
| int example_1 (int arg1,int arg2) { arg1 = arg2 ........ ........ return null }
|
高级语言函数的调用

Shell函数传参
1 2 3 4 5
| function name { echo "Hello $1" echo "Hello $2" }
|
Shell 函数调用
1 2 3 4 5 6
| name Lily lyhcc
[root@master datas] [root@master datas] Hello Allen, lyhcc
|
简单计算器
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| function cal { echo "$2" case $2 in +) echo $(($1 + $3)) ;; -) echo $(($1 - $3)) ;;
\*) echo "$1 $2 $3" echo "`expr $1 \* $3`" ;; /) echo $(($1 / $3)) ;; esac }
cal 2 \* 3 cal 2 + 3
|
注意\t
函数返回值
返回值方式
| 方法 |
格式 |
| 方法一 |
return |
| 方法二 |
echo |
使用return返回值
- 使用return返回值,只能返回1-255的整数
- 函数使用return返回值, 通常只是用来供其他地方调用获取状态,因此通常仅返回0或1 ; 0表示成功, 1表示失败
案例–判断MySQL是否在运行
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
| #!/bin/bash
this_pid=$$
function mysql_isRunning { ps -ef | grep mysqld | grep -v grep | grep -v $this_pid &> /dev/null if [ $? -eq 0 ];then return else return 1 fi } mysql_isRunning && echo "Mysql Server is running" || echo "Mysql Server is stoped"
执行过程 [root@master datas] + this_pid=14205 + mysql_isRunning + grep -v 14205 + ps -ef + grep mysqld + grep -v grep + '[' 0 -eq 0 ']' + return + echo 'Mysql Server is running' Mysql Server is running
|
使用echo返回值
- 使用echo可以返回任何字符串结果
- 通常用于返回数据,比如一个字符串值或者列表值
案例–获取系统用户名
1 2 3 4 5 6 7 8
| #!/bin/bash
function get_users { users=`cat /etc/passwd | cut -d ":" -f 1` echo $users } get_users
|