【shell编程】函数返回值
正文
shell函数返回值
在 shell 脚本中的函数中有两种方式进行返回值:
return
语句:仅能返回[0, 255]
之间的整数,常用于表示返回函数的执行结果状态。echo
语句:能返回任何数字、任何字符串,常用于表示返回函数的执行结果。
在 shell 脚本函数中可以使用 return
语句返回值,返回值表示的是函数的退出状态码。因为 return
语句的返回值只能是一个 [0, 255
之间的整数,其中 0
表示成功,其他值表示失败。可以在函数调用的后面立马使用特殊变量 $?
虎丘函数的返回值。如例:
#! /bin/bash
# 声明一个函数,该函数的作用是用于计算两数之和
function sum() {
local a=$1
local b=$2
# 返回两数之和的结果
return $((a+b))
}
# 调用函数
sum $1 $2
# 特殊变量 $? 的结果就是函数调用的结果
echo $?
输出:
[root@node01 demo]# sh test.sh 1 2
3
[root@node01 demo]# sh test.sh 2 4
6
2. 例子
#! /bin/bash
test () {
result=1
return $result
}
res=$(test)
echo $res
代码不会输出任何内容,没有输出任何内容的原因是return
命令用于返回函数的退出状态,并不产生输出。$(test)
捕获的是命令的标准输出,而不是它的退出状态。因此,r
的值为空。如果你想捕获函数的输出,你需要使用echo
命令来输出结果。以下是修改后的代码:
#! /bin/bash
test () {
result=1
echo $result
}
res=$(test)
echo $res
在这个代码中,test
函数会将result
的值1
通过echo
输出,然后这个输出会被捕获到变量res
中,最后打印出res
的值,即1
。如果需要检查函数的退出状态(return code),可以这样做:
#! /bin/bash
test () {
result=1
return $result
}
test
echo $?
3. 例子
#!/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 29.echo_return_nginx.sh
Nginx is stoped
~ % sudo nginx # Mac 使用,Linux为 systemctl start nginx
~ % sh 29.echo_return_nginx.sh
Nginx is running
可以通过 echo
返回值,通常是返回数据,比如说字符串、在或者不在 [0, 255]
范围内的任意数字等,为了在脚本中的其他地方使用。在函数外通过命令替换 $()
来获取函数的返回结果。如只是使用 echo
返回字符串:
#!/bin/bash
# 声明函数,并返回字符串
function hello() {
echo "hello world"
}
# 调用函数,使用 $() 获取函数的返回值
result=$(hello)
# 打印函数的返回值
echo "$result"
echo
echo "--------------------------"
echo
# 声明函数,并传入参数,并返回字符串
function hello_msg() {
echo "hello, $1"
}
# 调用函数并传入一个参数,使用 $() 获取函数的返回值
result=$(hello_msg "zhangsan")
# 打印函数的返回值
echo "$result"
输出:
[root@stor01 ~]# ./test.sh
hello world
--------------------------
hello, zhangsan
#!/bin/bash
# 声明函数,用来获取 shell 脚本的绝对路径
function get_script_path() {
# 获取脚本文件的父路径
local script_path=$(cd $(dirname $0); pwd)
# 获取脚本名
local script_name=$(basename $0)
# 返回脚本的绝对路径
echo "$script_path/$script_name"
}
# 调用函数,使用命令替换 $() 获取函数的返回值
path=$(get_script_path)
echo "当前脚本的绝对路径为:$path"
输出:
[root@stor01 demo]# ./test.sh
当前脚本的绝对路径为:/root/demo/test.sh
参考资料
分类:
【05】shell编程
标签:
【shell编程】
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
2018-06-03 【学习工具】vmware克隆独立虚拟机及初始配置
2018-06-03 【C++ 继承】重载、重写、隐藏的区别
2018-06-03 【rpm】创建子包