Shell函数的高级用法

一、函数的定义和使用

1、语法格式
格式一
格式二
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中传参
2、Shell中函数调用
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
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值