【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

 

 

参考资料

1. shell函数返回值

posted @ 2022-06-03 09:59  苏格拉底的落泪  阅读(63)  评论(0编辑  收藏  举报