Shell中函数的定义和使用

和其他语言一样,在Shell语言中也有着函数。尽管在Shell中函数并非是必须的编程元素,但是通过使用函数,可以对程序进行更加好的组织。将一些相对独立的代码变成函数,可以提高程序的可读性和重用性。避免重复编写大量相同的代码。

函数的定义

在Shell中可以通过下面的两种语法来定义函数,分别如下:

function_name ()
{
    statement1
    statement2
    ....
    statementn
}

或者

function function_name()
{
   statement1
   statement2
   ....
   statementn
}

函数的调用

当某个函数定义好了以后,用户就可以通过函数名来调用该函数了。在Shell中,函数调用的基本语法如下,

function_name parm1 parm2

下面定义了一个 sayhell()的方法,并调用

#! /bin/bash
function sayhello()
{
  echo "Hello,World"
}
sayhello

代码调用结果

[root@VM_156_149_centos shell]# sh hello.sh 
Hello,World

函数的返回值

首先,用户利用return来返回某个数值,这个与绝大部分的程序设计语言是相同的。但是 在Shell中,return语句只能返回某个0-255之间的整数值。在Shell中还有一种更优雅的方法帮助用户来获得函数执行后的某个结果,那就是使用echo。在函数中,用户需要将要返回的数据写入到标准输出(stout),通常这个操作是使用echo语句来完成的,然后在调用程序中将函数的执行结果赋值给一个变量。这种做法实际上就是一个命令替换的一个变种。

函数使用return返回值

函数的定义
#! /bin/bash

function sum()
{
  returnValue=$(( $1 + $2 ))
  return $returnValue
}

sum 22 4

echo $?
函数的调用
[root@VM_156_149_centos shell]# sh sum.sh 
26
函数返回值大于0-255,出错的情况

在上面的执行结果可以看到,所传递的两个数的和被成功的返回。但是通过return只能返回整数值,并且是0-255的范围,如果超出这个范围就会错误的结果。例如将上面的代码换成下面的参数

sum 253 4

则执行结果如下,

[root@VM_156_149_centos shell]# sh sum.sh 
1

可以发现,正确的结果应该是257,但是函数的返回值是1.

函数使用echo返回值

函数的定义
#! /bin/bash

function length()
{
  str=$1
  result=0
  if [ "$str" != "" ] ; then
      result=${#str}
  fi
  echo "$result"
}

len=$(length "abc123")

echo "The string's length is $len "
函数的调用
[root@VM_156_149_centos shell]# sh length.sh  
The string's length is 6 
  • 4
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
shell脚本,可以使用两种方法来定义函数。第一种方法是使用关键字function,格式为:function 函数名 { 命令序列 }。第二种方法是直接使用函数名和括号,格式为:函数名() { 命令序列 }。 函数shell脚本可以有返回值,可以使用return语句来指定返回值。例如,可以使用乘法运算来定义一个计算结果的函数,返回结果为参数乘以2的值: ``` double() { local result=$(( $1 * 2 )) return $result } ``` 函数可以接受参数,可以在括号指定参数的名称。例如,可以定义一个加法函数,接受两个参数,并返回它们的和: ``` add() { local sum=$(( $1 + $2 )) echo "The sum is $sum" } ``` 在函数内可以使用local命令将变量的作用范围限定在函数内部,这样函数内部定义的变量不会影响到外部的同名变量。 递归函数是指在函数内部调用自身的函数。例如,可以使用递归来实现阶乘函数: ``` factorial() { if (( $1 <= 1 )); then echo 1 else local subresult=$(factorial $(( $1 - 1 ))) echo $(( $1 * $subresult )) fi } ``` 此外,还可以将一些常用的函数放在一个函数,供其他脚本调用。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [shell函数(用法及定义)](https://blog.csdn.net/Gloomyumenge/article/details/111550262)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值