Shell function 函数

本文介绍了Linux Shell中的函数定义,包括两种语法形式,如何调用函数并传递参数,同时讨论了全局变量、局部变量的区别以及函数的返回值和echo的使用场景。通过实例演示了加减乘数计算和实际应用案例,如nginx状态检查和用户列表获取。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

函数定义和使用

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

语法格式

第一种

name()
{
	command1
	command2
	……
}

第二种

function name
{
	command1
	command2
	……
}

如何调用函数

  1. 直接使用函数名调用,可以将其想象成Shell中的一条命令
  2. 函数内部可以直接使用参数 $1,$2,$n
  3. 调用函数:function_name $1 $2

Shell 传参

function name
{
	echo "Hello $1"
	echo "Hello $2"
}
name Tom Nick 
# Hello Tom
# Hello Nick

示例:加减乘数

function calculate
{
	case $2 in 
		+)
			echo "`expr $1 + $3`"
			;;
		-)
			echo "`expr $1 - $3`"
			;;
		\*)
			echo "`expr $1 \* $3`"
			;;
		/)
			echo "`expr $1 / $3`"
			;;
}

calculate 20 + 30 # 50
calculate 20 / 5 # 4

函数的返回值

语法

  1. return
  2. echo

return

  • 使用return返回值,只能返回1-255的整数
  • 函数使用return返回值,通常只是用来供其他地方调用获取状态,因此通常仅返回0或1;0表示成功,1表示失败。

echo

  • 使用echo可以返回任何字符串结果
  • 通常用于返回数据,比如一个字符串值或者列表值

示例

1. return使用场景

函数通过return返回一个整数,这种场景通常是用来做判断的,也就是说在执行完函数之后,需要根据它的返回值做判断,通0表示成功,非0都是表示失败。

#!/bin/bash
 
this_pid=$$
# 判断nginx进程是否正在运行
function is_nginx_running
{
	ps -ef | grep nginx | grep -v grep | grep -v $this_pid &>/tmp/null
	if [ $? -eq 0 ];then
		# return 0,也可以省略0直接return,两个是等价
		return
	else
		return 1
	fi
}
# return在函数中的返回值,只是用来做状态判断的,根据状态值做下一步判断
# 函数的返回值为0时,表示nginx服务运行正常输出 && 后字符串,否则返回 ||后字符串
is_nginx_running && echo "Nginx is running" || echo "Nginx is stoped"
 
 
# 运行脚本
~ % sh echo_return_nginx.sh
Nginx is stoped
~ % sudo nginx  # Mac 使用,Linux为 systemctl start nginx 
~ % sh echo_return_nginx.sh
Nginx is running

2. echo使用场景

函数通过echo返回值,通常是返回数据用的,以供程序的其它地方使用。

#!/bin/bash
 
# 获取整个Linux系统上所拥有的所有用户
function get_users
{
	users=`cat /etc/passwd | cut -d: -f1` # linux使用
	# users=`cat /etc/passwd | tail -n+11 | cut -d: -f1 | cut -d_ -f2` # Mac 使用
	echo $users
}

# 执行该函数,返回值为用户列表
# get_users
 
# 遍历用户列表对用户名做处理
user_list=`get_users`
index=1
for user in $user_list
do
	echo "This $index user is : $user"
	index=$(($index+1))
done
 
 
# 运行脚本
~ % sh echo_sys_user.sh
This 1 user is : nobody
This 2 user is : root
... ...

全局变量 和 局部变量

全局变量

  • 不做特殊声明,Shell中变量都是全局变量
  • Tips:大型脚本程序中函数慎用全局变量

局部变量

  • 定义变量时,使用local关键字
  • 函数内核外 若存在同名变量,则函数内部变量覆盖外部变量

示例

var1="Hello world"

function test
(
	var2=87 # var2已经是全局变量
}

echo $var1 # Hello world
echo $var2 # 空

test

echo $var1 # Hello world
echo $var2 # 87

function test1
{
	echo $var2 # 前面调用过 已经存在了全局变量
} 

test1 # 87

使用local关键字

var1="Hello world"

function test
(
	local var2=87 # 局部变量
}

test

echo $var1 # Hello world
echo $var2 # 空

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小叶柏杉

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值