Shell函数的高级用法
一、函数的定义和使用
1、语法格式
![](https://i-blog.csdnimg.cn/blog_migrate/d7f0585c0c1d9d9a8e15a769e6f98b43.png)
![](https://i-blog.csdnimg.cn/blog_migrate/4314a9297f86b419096c9079389dffe1.png)
2、如何调用函数
- 直接使用函数名调用,可以将其想象成Shell的一条命令
- 函数内部可以使用参数
$1、$2、$3......$n
- 调用函数:
function_name $1 $2
3、示例演示
- 创建函数
Test()
{
echo "Hello Test"
}
- 使用函数
Test
4、小脚本(nginx守护进程)
写一个nginx脚本,如果nginx服务宕掉,则该服务可以检测并且将进程重新启动;如果正常运行,则不作任何处理
#!/bin/bash
#
this_pid=$$
while true
do
ps -ef | grep nginx | grep -v grep | grep -v $this_pid &> /dev/null
if [ $? -eq 0 ];then
echo "Nginx is running well"
sleep 3
else
systemctl start nginx
echo "Nginx is down,Start it...."
fi
done
二、向函数传递参数
1、Shell中传参
![](https://i-blog.csdnimg.cn/blog_migrate/d163532b9fc40529ea60d1844d861bed.png)
2、Shell中函数调用
![](https://i-blog.csdnimg.cn/blog_migrate/34c5ee69a58843137d917cbd6954f431.png)
3、小脚本
写一个脚本,该脚本可以实现计算器的功能,可以进行+、-、*、/
四种运算
#!/bin/bash
#
function calcu
{
case $2 in
+)
echo "`expr $1 + $3`"
;;
-)
echo "`expr $1 - $3`"
;;
\*)
echo "`expr $1 \* $3`"
;;
/)
echo "`expr $1 / $3`"
;;
esac
}
calcu $1 $2 $3
三、函数的返回值
1、return
- 使用return返回值,只能返回1-255的整数
- 函数使用return返回值,通常只是用来供其他地方调用获取状态,因此通常返回0或1
2、echo
- 返回任何字符串结果
- 通常适用于返回数据,比如一个字符串或者列表值
3、小练习
获取系统中所有的用户
#!/bin/bash
#
function get_users
{
users=`cat /etc/passwd | cut -d: -f1`
echo $users
}
user_list=`get_users`
index=1
for u in $user_list
do
echo "The $index user is : $u"
index=$(($index+1))
done
四、局部变量和全局变量
- 不作任何声明,Shell中的变量都是全局变量
- 大型脚本程序中应当慎用全局变量
1、局部变量的定义
定义变量时,使用local
关键字
函数内和外若存在同名变量,则函数内部变量会覆盖外部变量
2、小脚本
#!/bin/bash
#
var1="Hello world"
function test
{
local var2=87
}
test
echo $var1
echo $var2
五、函数库
- 经常使用的重复代码封装成函数文件
- 一般不是直接执行的,而是由其他脚本调用
1、小脚本
- 函数库脚本
function add
{
echo "`expr $1 + $2`"
}
function reduce
{
echo "`expr $1 - $2`"
}
function multiple
{
echo "`expr $1 \* $2`"
}
function divide
{
echo "`expr $1 / $2`"
}
# x
function sys_load
{
echo "Memory Info"
echo
free -m
echo
echo "Disk Usage"
echo
df -h
echo
}
- 调用函数脚本
#!/bin/bash
#
# 引入库文件
. /root/lesson/3.5/lib/base_function
add 12 23
reduce 90 30
multiple 12 12
divide 12 2