Linux拓展之Shell中函数的返回值

概述

在 Shell 脚本中的函数中有两种方式进行返回值:

  • return 语句:仅能返回 [0, 255] 之间的整数,常用于表示返回函数的执行结果状态。
  • echo 语句:能返回任何数字、任何字符串,常用于表示返回函数的执行结果。

return 语句

在 shell 脚本函数中也可以使用 return 语句返回值,但通常返回值表示的是函数的退出状态码。因为 return 语句的返回值只能是一个 [0, 255 之间的整数,其中 0 表示成功,其他值表示失败。可以在函数调用的后面立马使用特殊变量 $? 虎丘函数的返回值。如例:

#! /bin/bash

# 声明一个函数,该函数的作用是用于计算两数之和
function sum() {
   local a=$1
   local b=$2
   # 返回两数之和的结果
   return $(($a+$b))
}

# 调用函数
sum $1 $2
# 特殊变量 $? 的结果就是函数调用的结果
echo $?


return 语句进行返回值时的缺点很明显,即只能返回 [0, 255] 之间的任意整数。所以通常我们使用 return 返回语句来判断函数是否执行成功,如返回 0 表示成功,返回 1 表示失败。如例:

#!/bin/bash

function list_files() {
		# 校验参数个数是否只有一个,如果不是一个,则返回 1 表示函数执行失败
		if [ $# -ne 1 ]; then
			echo "参数个数不为 1"
			return 1
		fi
		# 校验输入的参数是否为目录,如果不是则返回 1 表示函数执行失败
		if [ ! -d $1 ]; then
			echo "输入路径 $1 不是目录"
			return 1
		fi
		# 使用 ls 命令显示输入参数(即目录)下的所有文件
		ls "$1"
		# 判断 ls 命令的执行结果,如果 ls 命令的返回状态码为 0 表示该命令执行正确,如果不为 0 则表示该命令执行错误
		if [ $? -ne 0 ]; then
			echo "ls 命令执行失败"
			reutrn 1
		fi
		# 最后返回 0 表示该函数所有操作执行成功
		return 0
}

# 调用函数
list_files "/home/"
if [ $? -eq 0 ]; then
		echo "函数 list_files 执行成功"
else
		echo "函数 list_files 执行失败"
fi

echo
echo "-----------------------------------------"
echo

# 调用函数
list_files "/root/test.txt"
if [ $? -eq 0 ]; then
		echo "函数 list_files 执行成功"
else
		echo "函数 list_files 执行失败"
fi

Linux拓展之Shell中函数的返回值_第1张图片

如果函数中没有 return 语句,则使用默认的退出状态,即最后一条命令的退出状态码。


echo 语句

可以通过 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"

Linux拓展之Shell中函数的返回值_第2张图片

更复杂的示例如下:

#!/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"

在这里插入图片描述

你可能感兴趣的:(#,Linux拓展,linux,bash,运维,shell)