Shell脚本(四)

一、函数

1、函数的定义

方式一:

function name {

commands

}

name:为函数的唯一函数名,不要与特殊含义的命令名重复

commands:构成函数的bash shell命令,依次执行

方式二:

name() {

commands

}

二、调用函数

函数的调用只需要指定函数名即可。每次执行函数时bash shell会找到函数的定义执行,函数的定义必须在使用前,否则会报错

1、返回值

通常情况下,函数的退出状态码为函数的最后一条命令返回的退出状态码,函数结束后可用$?查看,状态码为1,表示最后一条命令失败,为0表示成功

2、return

return:用于返回退出状态码

3、函数中的变量

全局变量:全局有效,可能会受到影响.

局部变量 :在变量声明前加上local关键字,仅在函数内部有效

4、传参

传递数组参数:不能直接将数组作为参数,否则仅传递数组中的第一个参数,需将数组拆分传递使用(echo {myarray[*]})

返回数组:使用echo依次输出单个值,后重新放入一个新的数组

复制代码
#!/bin/bash 
# returning an array value 
function arraydblr { 
   local origarray 
   local newarray 
   local elements 
   local i 
   origarray=($(echo "$@")) 
   newarray=($(echo "$@")) 
   elements=$[ $# - 1 ] 
   for (( i = 0; i <= $elements; i++ )) 
   { 
      newarray[$i]=$[ ${origarray[$i]} * 2 ] 
   } 
   echo ${newarray[*]} 
} 
myarray=(1 2 3 4 5) 
echo "The original array is: ${myarray[*]}" 
arg1=$(echo ${myarray[*]}) 
result=($(arraydblr $arg1)) 
echo "The new array is: ${result[*]}" 
$  
$ ./test12 
The original array is: 1 2 3 4 5 
The new array is: 2 4 6 8 10 

三、函数库

由于bash是在一个子进程中运行,使用函数库需要使用source命令连接上下文,

创建一个myfuncs的函数库,使用路径调用

复制代码
#!/bin/bash 
# using functions defined in a library file 
. ./myfuncs 
value1=10 
value2=5 
result1=$(addem $value1 $value2) 
result2=$(multem $value1 $value2) 
result3=$(divem $value1 $value2) 
echo "The result of adding them is: $result1" 
echo "The result of multiplying them is: $result2" 
echo "The result of dividing them is: $result3" 
$  
$ ./test14 
The result of adding them is: 15 
The result of multiplying them is: 50 
The result of dividing them is: 2 
相关推荐
GISer_Jing7 分钟前
大语言模型Agent入门指南
前端·数据库·人工智能
运筹vivo@18 分钟前
BUUCTF: [极客大挑战 2019]Upload
前端·web安全·php·ctf
qq_124987075321 分钟前
基于Spring Boot的长春美食推荐管理系统的设计与实现(源码+论文+部署+安装)
java·前端·spring boot·后端·毕业设计·美食·计算机毕业设计
运筹vivo@23 分钟前
攻防世界: easyupload
前端·web安全·php·ctf
UI设计兰亭妙微1 小时前
兰亭妙微:以HTML前端、UI/交互/图标设计赋能数字孪生与大屏设计新标杆
前端·ui·用户体验设计
jarreyer1 小时前
【AI编程】claudecode插件配置记录和trae软件相关配置
前端·chrome·ai编程
奔跑的web.1 小时前
TypeScript 类型断言
前端·javascript·typescript
ヤ鬧鬧o.1 小时前
HTML多倒计时管理
前端·javascript·css·html5
知兀1 小时前
【uniapp/vue3+ts/js】eslint9+prettier+husky+lint-staged
前端·javascript·uni-app
小北方城市网1 小时前
Spring Cloud Gateway 动态路由进阶:基于 Nacos 配置中心的热更新与版本管理
java·前端·javascript·网络·spring boot·后端·spring