目录

一、函数的作用

二、定义函数

三、调用函数

1.在脚本中调用函数

2.在函数中调用函数

四、函数传参

五、函数的返回值

六、函数的递归

七、函数及其变量的作用范围

八、外部脚本调用函数


一、函数的作用

  1. 语句块定义成函数约等于别名,定义函数,再引用函数
  2. 封装的可重复利用的具有特定功能的代码

二、定义函数

定义函数就是只将一段实现某个任务的命令序列封装进一个函数,便于使用和后期维护。

function 函数名() {
    命令序列
}
 
函数名() {
    命令序列
}

[root@localhost1 func]#vim definite.sh
#!/bin/bash
#定义函数运算()
function yunsuan() {a=2b=3jia=$[ $a + $b ]jian=$[ $a - $b]echo "相加等于:$jia"echo "相减等于:$jian"
}

三、调用函数

定义过的函数需要调用才能执行其中的命令序列。

1.在脚本中调用函数

[root@localhost1 func]#vim definite.sh
#!/bin/bash
function yunsuan() {a=2b=3jia=$[ $a + $b ]jian=$[ $a - $b]echo "相加等于:$jia"echo "相减等于:$jian"
}#直接在脚本中写入函数名
yunsuan[root@localhost1 func]#bash definite.sh
相加等于:5
相减等于:-1

2.在函数中调用函数

[root@localhost1 func]#vim definite.sh
#!/bin/bash
function jiajian() {a=10b=3jia=$[ $a + $b ]jian=$[ $a - $b]echo "相加等于:$jia"echo "相减等于:$jian"
}function chengchu() {a=10b=3cheng=$[ $a * $b ]chu=$[ $a / $b]echo "相乘等于:$cheng"echo "相除等于:$chu"
}#调用上两个函数
yunsuan() {jiajianchengchu
}yunsuan[root@localhost1 func]#bash definite.sh
相加等于:13
相减等于:7
相乘等于:30
相除等于:3

四、函数传参

在Shell中,调用函数时可以向其传递参数。在函数体内部,通过 $n 的形式来获取参数的值。例如:$1表示第一个参数,$2表示第二个参数…即使用位置参数来实现参数传递。

注意

  • 当我们执行脚本时跟的参数,对应的是脚本中的位置变量
  • 当我们执行函数时跟的参数,对应的是函数中的位置变量

虽然都表示为$1、$2,但我们执行一个函数时,传入的参数只跟其输入函数的顺序有关,与输入脚本时传入参数的顺序无关。

[root@localhost1 ~]#vim chuancan.sh
#!/bin/bashtest1() {jian=$[ $1 - $2 ]   #脚本中的$1对应先传入的30,$2对应后传入的50echo "相减的值为:$jian"
}test1 $2 $1   #执行函数时,先传入30($2),再传入50($1)[root@localhost1 ~]#bash chuancan.sh 50 30  #执行脚本时传入参数 $1对应50 $2对应30
相减的值为:-20

五、函数的返回值

return 表示退出函数并返回一个退出值,脚本中可以用$?变量表示该退出值(状态码)

在函数中的使用原则

  • 函数一结束就取返回值,因为$?变量只返回执行的最后一条命令的退出状态码;
  • 退出状态码必须是0~255,超出时值将为除以256取余。
状态码 含义
0 执行成功
非0 不同程度的错误
2 用法不当
126 不是可执行的
127 命令未找到
[root@localhost1 array]#vim returntest.sh
#!/bin/bash
returntest1() {if [ $1 -eq $passwd ];thenecho "$name的密码输入正确!"elseecho "$name的密码输入错误!"return 1fi
}name=张三
passwd=123456
returntest1 $1[root@localhost1 array]#bash returntest.sh 123
张三的密码输入错误!
[root@localhost1 array]#echo $?
1     -- 这里输入错误返回了我们指定的状态码1
[root@localhost1 array]#bash returntest.sh 123456
张三的密码输入正确!
[root@localhost1 array]#echo $?
0

六、函数的递归

是指函数在满足递归条件的情况下,调用函数本身执行到

[root@localhost1 ~]#vim jiecheng.sh
#!/bin/bash
fact() {if [ $1 -eq 0 -o $1 -eq 1 ];thenecho 1elseway=$[$1 - 1]    #迭代方式(指定数每次减1)result=$(fact $way)    #递归执行函数(使初始值每次减1)echo $[ $1 * $result ]    #输出初始值乘每次递归的值,直到1(实现阶乘效果)fi
}
read -p "请输入一个数:" n
result=$(fact $n)
echo "$n的阶乘为:$result"[root@localhost1 ~]#bash jiecheng.sh
请输入一个数:6
6的阶乘为:720
[root@localhost1 ~]#bash jiecheng.sh
请输入一个数:1
1的阶乘为:1
[root@localhost1 ~]#bash jiecheng.sh
请输入一个数:4
4的阶乘为:24
[root@localhost1 ~]#bash jiecheng.sh
请输入一个数:9
9的阶乘为:362880

七、函数及其变量的作用范围

  1. 函数在shell脚本中仅在当前shell环境中有效
  2. shell脚本中变量默认全局有效
  3. 将变量限定在函数内部(定义变量前加上 local 命令)
[root@localhost1 ~]#vim variable.sh
#!/bin/bash
#定义i变量值为1
i=1  test1() {i=10    #定义i变量值为10echo $i
}test1    #调用函数
echo $i    #输出变量i的值#输出的i均为10,是由于第二点的特性,i的值在函数中被重新赋值了
[root@localhost1 ~]#bash variable.sh
10
10

使用 local 限定函数内部变量

[root@localhost1 ~]#vim variable.sh
#!/bin/bash
i=1test1() {local i=10    #加local限定为内部变量,将不再影响函数外的变量echo $i
}test1
echo $i[root@localhost1 ~]#bash variable.sh
10
1

八、外部脚本调用函数

在外部脚本调用一个脚本或文件中的函数,需要先在脚本中加载目标文件,需要使用绝对路径(source 文件名 或 . 文件名),再输入函数名即可执行。

[root@localhost1 ~]#vim hanshu.sh
#!/bin/bashtest1() {echo "我是hanshu.sh文件中的test1函数"
}#在外部脚本中调用hanshu.sh中的test1函数
[root@localhost1 ~]#vim diaoyong.sh
source /root/hanshu.shtest1#执行外部脚本
[root@localhost1 ~]#bash diaoyong.sh
我是hanshu.sh文件中的test1函数

调用函数库文件

函数库文件是指将一些常用的函数提前编写好放入这个函数库文件,当我们编写脚本时,同样通过绝对路径加载函数库文件,在调用其中的函数,这样可以提高代码编写的效率(类似于java中面向对象编程,调用方法)

Shell脚本函数简介及运用相关推荐

  1. Linux的shell脚本函数教程

    Linux的shell脚本函数教程 一.shell介绍 二.shell函数的介绍 三.函数的定义 四.shell中函数使用示例 一.shell介绍 二.shell函数的介绍 三.函数的定义 四.she ...

  2. Shell脚本函数(函数传参、递归、创建库)

    Shell脚本函数 一.Shell函数 1.Shell函数定义 2.函数的返回值 return echo 二.函数传参 三.函数变量的作用范围 四.递归 1.阶乘 2.递归目录 五.创建库 一.She ...

  3. Shell脚本函数应用

    记录:429 场景:Shell脚本函数应用,定义函数,函数调用,函数传参. 版本:CentOS Linux release 7.9.2009. 1.普通函数 示例普通函数是没有入参和返回值. 1.1脚 ...

  4. Shell脚本——函数、中断及退出、字符串处理

    Shell函数 函数:在shell脚本中,将一些需要重复使用的操作,定义为公共的语句块,即可称为函数.通过使用函数,可以使脚本代码更加简洁,增强易读性,提高shell脚本的执行效率. 1)函数的定义方 ...

  5. 【shell】shell脚本实战-shell脚本函数详解

    文章目录 前言 shell函数的定义 函数的优势 shell 函数的调用 实战案例 总结 前言 Shell 函数的本质是一段可以重复使用的脚本代码,这段代码被提前编写好了,放在了指定的位置,使用时直接 ...

  6. shell脚本函数声明,调用

    shell脚本中函数的声明, 调用,处理结果的返回等问题. 1. 函数声明 1.1 函数需要先声明后调用, 声明和调用有顺序要求. 1.2 shell中的函数返回值只能是数字, 返回0表示执行成功, ...

  7. linux shell脚本传数组参数,shell脚本----函数和数组

    目录 一.shell函数 1.简介 2.格式 3.函数调用 4.示例演示 5.递归函数 二.shell数组 1.数组 2.Shell 数组的定义 3.获取数组元素 4.元素切片,替换,删除 5.示例演 ...

  8. Linux中Shell脚本函数库的笔记

    Shell函数库的作用:函数库就是对一些十分常用的功能,独立出来,然后集中存放在一些独立的文件中,这些文件可以理解为函数库.函数库本质上也是函数,一般情况下函数库的函数建议使用下划线开头. 示例: c ...

  9. Shell脚本——函数

    Shell 函数的本质是一段可以重复使用的脚本代码,这段代码被提前编写好了,放在了指定的位置,使用时直接调取即可. 一.语法 Shell 函数定义的语法格式如下: function name() {s ...

最新文章

  1. EqualLogic控制器算法研究一:基本管理
  2. x86 下制作 ARM Docker 镜像,Docker Hub、Travis 自动构建 qemu-user-static
  3. 记一个自己项目上线的全过程
  4. Linux命令——chmod
  5. [转]Tomcat启动报错:AnnotationConfigBeanDefinitionParser are only available on JDK 1.5 and higher...
  6. css命中与jquery命中
  7. 各种小巧的Hello World
  8. lnmp+lamp编译后,编译参数查看
  9. Java从入门到精通 第14章 关于类的专题研究
  10. 如何获取全国省市区行政边界数据
  11. java物流管理系统_JAVA语言的物流管理系统的设计和实现.doc
  12. c语言五子棋中怎么设置开局,五子棋开局口诀_五子棋常用的开局方式
  13. 出栈顺序判断问题——划线法
  14. 2020年11月总结
  15. 吴军《态度》读后感(1):人生哲学
  16. 英语简单的6种构词法
  17. Centos7.2/3/4/5镜像(1511,1611,1708,1804),附Centos官网镜像,旧版全镜像链接及仓库下载地址
  18. 天宝AMD 300U物理机安装黑群晖处理内存不足的问题
  19. 非谓语动词---不定式作名词
  20. linux lamp 搭建,LInux-Lamp搭建

热门文章

  1. python 数组写txt_python打开一个txt文件的具体代码
  2. python读取txt为dataframe_python批量读取txt文件为DataFrame格式的方法总结
  3. 支付宝花呗额度快充服务调整,期间不再支持提额
  4. synchronized(this)锁的是什么?同步静态方法,同步非静态方法,锁的都是什么?
  5. prim算法适用条件_Prim算法和Kruskal算法介绍
  6. 工业机器人专业就业方向及就业前景
  7. Cocos Creator 性能调优:如何减少 2D/3D DrawCall?
  8. OpenGL——透视
  9. 计算机专业论文提纲,计算机专业论文提纲格式模板 计算机专业论文框架怎样写...
  10. Word的特殊边框设置技巧