17创建函数

文章介绍了BashShell中创建和使用函数的各种方法,包括基本的脚本函数定义、返回值管理、在函数中使用变量(局部与全局)、数组变量的应用、函数递归以及如何创建库文件和在命令行上使用函数。还特别强调了参数传递、返回值的获取和函数的调用规则。
摘要由CSDN通过智能技术生成

17. 创建函数

17.1 基本的脚本函数

17.1.1 创建函数
有两种定义函数的格式:

#第一种定义函数的方式
function name{
	commands
}
#第二种定义函数的方式
name(){
	commands
}

17.1.2 使用函数
test1.sh脚本详细内容

#!/bin/bash

function func1 {
  echo "This is an example of a function"
}

count=1
while [ $count -le 10 ]
do
  func1
  count=$[ $count + 1 ]
done

echo "This is end of the loop"
echo "This is the end of script"

使用准则:
1.不能重定义函数,函数名必须重新定义
2.必须在定义之后才能使用

17.2 返回值

17.2.1 默认状态码
$?可以得到函数的返回值,执行成功默认返回0,执行失败默认返回1。

17.2.2 使用return命令
return val就可以实现返回指定状态码,但是需要注意
1.记住,函数一结束就取返回值;
2. 记住,退出状态码必须是0~255。

17.2.3 可以使用函数输出

function db1{
	read -p "Enter a value:" value
	echo $[ $value * 2 ]
}
result=$(db1) #得到函数的输出

17.3 在函数中使用变量

17.3.1 向函数传递参数
命令行传递给函数的参数在之前介绍过了,主要是$1$2$#表示参数的个数。

注意如果在函数中使用$1$2变量,这与命令行传递的$1$2变量并不一致,必须手动传一次。 例如:

#!/bin/bash
function badfunc1 {
   echo $[ $1 * $2 ]
}

if [ $# -eq 2 ]
then
   #这里必须手动传递,否则执行报错
  value=$(badfunc1 $1 $2)   
  echo "The result is $value"
else
  echo "Usage: badfunc1 a b"
fi

17.3.2 在函数中处理变量
变量作用域分为全局变量和局部变量
1.全局变量
默认情况,shell定义的变量都属于全局变量

#!/bin/bash 
# demonstrating a bad use of variables 
function func1 { 
   temp=$[ $value + 5 ] 
   result=$[ $temp * 2 ] 
} 
 
temp=4 
value=6 
 
func1 
echo "The result is $result" 
if [ $temp -gt $value ] 
then 
   echo "temp is larger" 
else 
   echo "temp is smaller" 
fi

2.局部变量
使用local关键字声明函数内部的局部变量,返回结果保持全局变量。

17.4 数组变量和函数

17.4.1 向函数传递数组参数
跟一般的编程语言一样,数组名代表数组首地址,首地址对应的元素是数组中第一个元素。

myarr=(1 2 3 4 5)
echo $myarr         #打印数组的第一个元素

传递所有的参数,并接收所有的元素。

#!/bin/bash
function addarray {
   local sum=0
   local newarray
   newarray=($(echo "$@"))
   for value in ${newarray[*]}
   do
     sum=$[ sum + $value ]
   done
   echo $sum
}
myarr=(1 2 3 4 5)
result=$(addarray ${myarr[*]})
echo "The result is $result"

17.4.2 从函数返回数组

#!/bin/bash

function arraydir {
   local originarr
   local newarr
   local ele_nums
   local i
   originarr=($(echo "$@"))
   ele_nums=$[ $# - 1 ]
   for((i = 0; i <= $ele_nums; i++ )){
     newarr[$i]=$[ ${originarr[$i]} * 2 ]
   }
   echo ${newarr[*]}  #返回所有元素
}
myarr=(1 2 3 4 5)
echo "The origin arr is: ${myarr[*]}"
result=($(arraydir ${myarr[*]}))
echo "The new arr is:${result[*]}"

17.5 函数递归

给出一个计算阶乘的递归例子

#!/bin/bash
function factorial {
  if [ $1 -eq 1 ]
  then
     echo 1
  else
     local temp=$[ $1 - 1 ]
     local result=$(factorial $temp)
     echo $[ $result * $1 ]
  fi
}

read -p "Enter value:" value
result=$(factorial $value)
echo "The factorial result is $result"

17.6 创建库

要让函数在多个脚本中都可以使用,最好创建函数库文件,在多个脚本中引用,就是常见编程语言中的头文件。使用source指令,快捷别名为点操作符

例如,如果在myfuncs库文件中编写了需要用到的函数,在脚本中可以使用../myfuncs运行对应函数

#!/bin/bash
. ./myfuncs   #引入库文件

result=$(addem 10 15)     #调用库文件中的addem函数
echo "The result is $result"

17.7 在命令行上使用函数

一旦在shell中定义了函数,你就可以在整个系统中使用它了,无需担心脚本是不是在PATH环境变量里。重点在于让shell能够识别这些函数。

17.7.1 在命令行上创建函数
1.单行定义
当在命令行上定义函数时,你必须记得在每个命令后面加个分号,这样shell就能知道在哪里是命令的起止了。

function divem { echo $[ $1 / $2 ];  }

2.多行定义
bash shell会使用次提示符来提示输入更多命令。用这种方法,你不用在每条命令的末尾放一个分号,只要按下回车键就行。

$ function multem { 
> echo $[ $1 * $2 ] 
> }

17.7.2 在.bashrc文件中创建函数
1.直接定义函数
把你写的函数放在文件末尾就行了。

#!/bin/bash
if [ -r /etc/bashrc ]; then
  . /etc/bashrc
fi

function addem {
  echo $[ $1 + $2 ]
}

下次启动shell时,库中的所有函数都可在命令行界面下使用了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值