Shell脚本函数简介及运用
目录
一、函数的作用
二、定义函数
三、调用函数
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
七、函数及其变量的作用范围
- 函数在shell脚本中仅在当前shell环境中有效
- shell脚本中变量默认全局有效
- 将变量限定在函数内部(定义变量前加上 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脚本函数简介及运用相关推荐
- Linux的shell脚本函数教程
Linux的shell脚本函数教程 一.shell介绍 二.shell函数的介绍 三.函数的定义 四.shell中函数使用示例 一.shell介绍 二.shell函数的介绍 三.函数的定义 四.she ...
- Shell脚本函数(函数传参、递归、创建库)
Shell脚本函数 一.Shell函数 1.Shell函数定义 2.函数的返回值 return echo 二.函数传参 三.函数变量的作用范围 四.递归 1.阶乘 2.递归目录 五.创建库 一.She ...
- Shell脚本函数应用
记录:429 场景:Shell脚本函数应用,定义函数,函数调用,函数传参. 版本:CentOS Linux release 7.9.2009. 1.普通函数 示例普通函数是没有入参和返回值. 1.1脚 ...
- Shell脚本——函数、中断及退出、字符串处理
Shell函数 函数:在shell脚本中,将一些需要重复使用的操作,定义为公共的语句块,即可称为函数.通过使用函数,可以使脚本代码更加简洁,增强易读性,提高shell脚本的执行效率. 1)函数的定义方 ...
- 【shell】shell脚本实战-shell脚本函数详解
文章目录 前言 shell函数的定义 函数的优势 shell 函数的调用 实战案例 总结 前言 Shell 函数的本质是一段可以重复使用的脚本代码,这段代码被提前编写好了,放在了指定的位置,使用时直接 ...
- shell脚本函数声明,调用
shell脚本中函数的声明, 调用,处理结果的返回等问题. 1. 函数声明 1.1 函数需要先声明后调用, 声明和调用有顺序要求. 1.2 shell中的函数返回值只能是数字, 返回0表示执行成功, ...
- linux shell脚本传数组参数,shell脚本----函数和数组
目录 一.shell函数 1.简介 2.格式 3.函数调用 4.示例演示 5.递归函数 二.shell数组 1.数组 2.Shell 数组的定义 3.获取数组元素 4.元素切片,替换,删除 5.示例演 ...
- Linux中Shell脚本函数库的笔记
Shell函数库的作用:函数库就是对一些十分常用的功能,独立出来,然后集中存放在一些独立的文件中,这些文件可以理解为函数库.函数库本质上也是函数,一般情况下函数库的函数建议使用下划线开头. 示例: c ...
- Shell脚本——函数
Shell 函数的本质是一段可以重复使用的脚本代码,这段代码被提前编写好了,放在了指定的位置,使用时直接调取即可. 一.语法 Shell 函数定义的语法格式如下: function name() {s ...
最新文章
- EqualLogic控制器算法研究一:基本管理
- x86 下制作 ARM Docker 镜像,Docker Hub、Travis 自动构建 qemu-user-static
- 记一个自己项目上线的全过程
- Linux命令——chmod
- [转]Tomcat启动报错:AnnotationConfigBeanDefinitionParser are only available on JDK 1.5 and higher...
- css命中与jquery命中
- 各种小巧的Hello World
- lnmp+lamp编译后,编译参数查看
- Java从入门到精通 第14章 关于类的专题研究
- 如何获取全国省市区行政边界数据
- java物流管理系统_JAVA语言的物流管理系统的设计和实现.doc
- c语言五子棋中怎么设置开局,五子棋开局口诀_五子棋常用的开局方式
- 出栈顺序判断问题——划线法
- 2020年11月总结
- 吴军《态度》读后感(1):人生哲学
- 英语简单的6种构词法
- Centos7.2/3/4/5镜像(1511,1611,1708,1804),附Centos官网镜像,旧版全镜像链接及仓库下载地址
- 天宝AMD 300U物理机安装黑群晖处理内存不足的问题
- 非谓语动词---不定式作名词
- linux lamp 搭建,LInux-Lamp搭建
热门文章
- python 数组写txt_python打开一个txt文件的具体代码
- python读取txt为dataframe_python批量读取txt文件为DataFrame格式的方法总结
- 支付宝花呗额度快充服务调整,期间不再支持提额
- synchronized(this)锁的是什么?同步静态方法,同步非静态方法,锁的都是什么?
- prim算法适用条件_Prim算法和Kruskal算法介绍
- 工业机器人专业就业方向及就业前景
- Cocos Creator 性能调优:如何减少 2D/3D DrawCall?
- OpenGL——透视
- 计算机专业论文提纲,计算机专业论文提纲格式模板 计算机专业论文框架怎样写...
- Word的特殊边框设置技巧