当前位置: 首页 > news >正文

Shell 脚本编程:函数

Shell 脚本编程:函数

将命令序列按格式写在一起
可重复使用命令序列

一、函数定义格式

格式一:
function 函数名 {命令序列
}
格式二:
函数名() {命令序列
}

二、函数返回值

  • 使用 return 返回值(0-255),可通过 $? 获取

  • 0-255,超出时 除以256取余

示例:
#!/bin/bash
function cy {read -p "请输入一个整数: " nreturn $[n*2]
}
cy
echo "返回值: $?"

在这里插入图片描述

3. 函数传参与变量作用域

函数变量的作用范围(局部变量以及全局变量)
函数在shell脚本中仅在当前shell环境中有效
shell脚本中变量默认全局有效
将变量限定一个函数的内部local,即局部变量

示例:传参计算两数之和
#!/bin/bash
sum() {sum=$[ $1 + $2 ]echo $sum
}
sum $1 $2

在这里插入图片描述

示例:局部变量与全局变量

将变量限定在函数内部使用local命令
即这个local的变量仅仅在当前的函数内有效,在别的函数中无效

#!/bin/bash
abc() {echo "函数内未定义local的i: $i"let i++local ii=6echo "函数内local的i: $i"
}
i=9
abc
echo "函数外的i: $i"

在这里插入图片描述

四、递归函数

示例:计算阶乘
#!/bin/bash
function yy() {if [ $1 -eq 1 ]; thenecho 1elselocal temp=$[$1 - 1]local result=$(yy $temp)echo $[result * $1]fi      
}
read -p "输入一个值: " value
result=$(yy $value)
echo "阶乘值为: $result"

在这里插入图片描述

五、函数库

将常用函数集中在一个脚本中,方便其他脚本调用

示例

编辑函数库脚本

#!/bin/bash
jia() {result=$[$1 + $2]echo "$result"
}jian() {result=$[$1 - $2]echo "$result"
}cheng() {result=$[$1 * $2]echo "$result"
}chu() {if [ $2 -ne 0 ]; thenresult=$[$1 / $2]echo "$result"elseecho "除法中分母不能为0"fi
}

编辑调用函数库脚本

#!/bin/bash
. /root/test5.shread -p "请输入第一个数字: " n
read -p "请输入第二个数字: " mresult1=$(jia $n $m)
result2=$(jian $n $m)
result3=$(cheng $n $m)
result4=$(chu $n $m)echo "两数之和为: $result1"
echo "两数之差为: $result2"
echo "两数之积为: $result3"
echo "两数之商为: $result4"

在这里插入图片描述


文章转载自:

http://xTDZa5aE.gctkk.cn
http://yPxFin1n.gctkk.cn
http://8DNv4gT7.gctkk.cn
http://NjhxlNCK.gctkk.cn
http://fxVmNVJR.gctkk.cn
http://dZbDxH3v.gctkk.cn
http://yp06aMe1.gctkk.cn
http://honYTXJX.gctkk.cn
http://redUo6iQ.gctkk.cn
http://2X6NjtGa.gctkk.cn
http://0JDxQzRk.gctkk.cn
http://ISRotLJ7.gctkk.cn
http://v3rFFoBC.gctkk.cn
http://TTrTCKAo.gctkk.cn
http://r2714Dod.gctkk.cn
http://W42jAVik.gctkk.cn
http://nteYZz9Q.gctkk.cn
http://YX0HMHXV.gctkk.cn
http://NhuUcSmh.gctkk.cn
http://bCl283yg.gctkk.cn
http://9jkE2PkF.gctkk.cn
http://Xsa5DWeT.gctkk.cn
http://U4wtJ4XM.gctkk.cn
http://GeoIrW7n.gctkk.cn
http://nZQRzSad.gctkk.cn
http://3QMt6hF7.gctkk.cn
http://o7AR7C3y.gctkk.cn
http://o0v9DHNF.gctkk.cn
http://RQ3QyVh1.gctkk.cn
http://tXNs86Ig.gctkk.cn
http://www.dtcms.com/a/377533.html

相关文章:

  • C++ STL 容器的一个重要成员函数——`emplace_back`
  • vue3:触发自动el-input输入框焦点
  • python range函数练习题
  • Q2(门座式)起重机司机的理论知识考试考哪些内容?
  • 企业微信消息推送
  • 顺序表:数据结构中的基础线性存储结构
  • 什么是X11转发?
  • OpenCV计算机视觉实战(24)——目标追踪算法
  • 4.2 I2C通信协议
  • Spring Boot 读取 YAML 配置文件
  • 【系统分析师】第20章-关键技术:微服务系统分析与设计(核心总结)
  • SAP-MM:SAP MM模块精髓:仓储地点(Storage Location)完全指南图文详解
  • Shell脚本周考习题及答案
  • 广东省省考备考(第九十六天9.10)——言语(刷题巩固第二节课)
  • Pthread定时锁与读写锁详解
  • Go模块自动导入教学文档
  • 技术文章大纲:开学季干货——知识梳理与经验分享
  • TensorFlow平台介绍
  • Vue3 中实现按钮级权限控制的最佳实践:从指令到组件的完整方案
  • 生成模型与概率分布基础
  • Cookie之domain
  • JavaSSM框架-MyBatis 框架(五)
  • 中州养老:设备管理介绍
  • 【Day 51|52 】Linux-tomcat
  • MySQL - 如果没有事务还要锁吗?
  • “高德点评”上线,阿里再战本地生活
  • JUC的常见类、多线程环境使用集合类
  • 《C++ 108好库》之1 chrono时间库和ctime库
  • C++篇(7)string类的模拟实现
  • 弱加密危害与修复方案详解