shell函数(用法及定义)
shell函数
将命令序列按格式写在一起
可方便重复使用命令序列
文章目录
- shell函数
- 一、shell函数定义:
- 方法一
- 方法二
- 二、函数返回值:
- 以乘法2乘以某数为例
- 三、函数传参:
- 加法
- 四、函数变量的作用范围(local的使用):
- 五、递归
- 阶乘
- 递归目录
- 六、创建函数库
一、shell函数定义:
方法一
function 函数名 {命令序列
}
方法二
函数名() {命令序列
}
二、函数返回值:
return表示退出函数并返回一个退出值,脚本中可以用$?变量显示该值
使用原则:
1、函数一结束就取返回值,因为$? 变量只返回执行的最后一条命令的退出状态码
2、退出状态码必须是0~255,超出时,超出的数值除以256取余数,比如300那就是300除以256,还余44
以乘法2乘以某数为例
函数方式一例:
#!/bin/bashfunction yp1 {read -p "请输入: " yyyy=$[$yy*2] #计算公式return $yy #退出并返回一个退出值,称:退出状态码
##### 以下为主体部分 #####
}
yp1 #调用变量名
echo $? #可以用$?显示return的退出状态码
执行
[root@localhost opt]# . yyy2.sh
请输入: 3
6
[root@localhost opt]# . yyy2.sh
请输入: 260
8
可以发现套用了2乘以我们输入数的公式,输入3会自动乘以2输出6;但是例260大于255了,会将数值先乘以2再除以256,的余数为8
函数方式二例:
#!/bin/bashyp1 () {
read -p "请输入: " yy
yy=$[$yy*2]
echo $yy}result=`yp1`
echo $result
执行结果和方式一相同
三、函数传参:
加法
第一种人性化方式展示
#!/bin/bashypy1 () {sum=$[$1 + $2]
echo $sum}read -p "请输入第一个参数: " first
read -p "请输入第二个参数: " secondypy1 $first $second
执行
[root@localhost opt]# . yyy4.sh
请输入第一个参数: 4
请输入第二个参数: 6
10
第二种最常用,方便自动编程
#!/bin/bashypy1 () {sum=$[$1 + $2]
echo $sum}ypy1 $1 $2
执行
[root@localhost opt]# . yyy5.sh 4 6
10
需在执行命令的后面加上需要加的参数,不然会错误
这里用的是位置变量,$1代表第一位,也就是我们第一次输入的值,$2表示第二位,第二个值。
最后变量名 跟上 两个位置变量
四、函数变量的作用范围(local的使用):
函数在shell脚本中仅在当前shell环境中有效
shell脚本中变量默认全局有效
将变量限定在函数内部使用local命令
实验:
#!/bin/bashypy1 () {
a=5
b=6
echo "c等于$c"}a=8
c=9
ypy1
echo "a等于$a"
echo "b等于$b"
这样执行的结果是
[root@localhost opt]# . yyy6.sh
c等于9
a等于5
b等于6
虽然c是最后定义的值,但是会优先显示,并且外面定义a的值并不会覆盖原有的值,因为函数里的是全局变量,主体的并不会覆盖里面,但是c在里面并没有值,主体的命令可以赋值给c。
#!/bin/bashypy1 () {
local i
i=8
echo "inside $i"}i=9
ypy1
echo "outside $i"
执行结果
[root@localhost opt]# . yyy7.sh
inside 8
outside 9
明明都是一样的变量名,为什么两种i的值可以不一样
因为local相当于局部变量,将i=8给锁住了一个局部区域,也就是后面命令里的i被锁住为8,直到函数结束;并不会因为影响主体的变量
可以多添加一个echo输出命令,不进行local看看结果
#!/bin/bashypy1 () {
echo "inside2 $i"
local i
i=8
echo "inside $i"}i=9
ypy1
echo "outside $i"
[root@localhost opt]# . yyy7.sh
inside2 9
inside 8
outside 9
结果新添加的输出里的i由主体命令更改变成了9,证明local是局部的变量
局部变量和全局变量是两种变量,但是可以同名
五、递归
函数调用自己本身的函数
阶乘
表示按顺序依次乘以下一个数,比如1x2x3
实例:
#!/bin/bashypy1 () {if [ $1 -eq 1 ]
thenecho 1
elselocal ppp=$[$1 - 1]local yyy=$(ypy1 $ppp)echo $[$1 * $yyy]
fi}read -p "请输入阶乘数: " sz
yyy=`ypy1 $sz`
echo $yyy
执行
[root@localhost opt]# . yyy8.sh
请输入阶乘数: 3
6
[root@localhost opt]# . yyy8.sh
请输入阶乘数: 4
24
递归目录
比如递归/var/log下的所有文件
#!/bin/bashfunction ypy1 {for p in `ls $1`
doif [ -d "$1/$p" ]thenecho "$2$f" ypy1 "$1/$p" "$2"elseecho "$2$p"fi
done}ypy1 "/var/log" ""
执行
..................省略内容sa01
sa04
sa09
sa22
sa23
sa30
sar22secure
secure-20201222spooler
spooler-20201222tallylogtuned.log
vmware-vgauthsvc.log.0
vmware-vmsvc.log
vmware-vmusr.log
wpa_supplicant.log
wtmp
Xorg.0.log
Xorg.0.log.old
Xorg.1.log
Xorg.9.log
yum.log
六、创建函数库
创建一个函数库
可以随时调用库里的公式
比如:加减乘除
首先在一个文件里创建一个函数库
#!/bin/bashjiafa () {result=$[$1 + $2]echo $result
}jianfa () {result=$[$1 - $2]echo $result
}chengfa () {result=$[$1 * $2]echo $result
}chufa () {
if [ $2 -ne 0 ]thenresult=$[$1 / $2]echo $resultelseecho "$2不能等于0!"
fi
}
再在另一个文件里引用函数库文件
#!/bin/bash. /opt/yyy10.sh ##引入函数库文件read -p "输入第一个参数值:" first
read -p "输入第二个参数值:" secondresult1=`jiafa $first $second`
result2=`jianfa $first $second`
result3=$(chengfa $first $second)
result4=$(chufa $first $second)echo $result1
echo $result2
echo $result3
echo $result4
执行
[root@localhost opt]# . yyy11.sh
输入第一个参数值:4
输入第二个参数值:5
9
-1
20
0
[root@localhost opt]# . yyy11.sh
输入第一个参数值:10
输入第二个参数值:20
30
-10
200
0
[root@localhost opt]# . yyy11.sh
输入第一个参数值:30
输入第二个参数值:25
55
5
750
1
shell函数(用法及定义)相关推荐
- python中的lambda函数用法--无需定义函数名的函数或子程序,避免代码充斥着大量单行函数
匿名函数lambda:是指一类无需定义标识符(函数名)的函数或子程序. lambda 函数可以接收任意多个参数 (包括可选参数) 并且返回单个表达式的值. 要点: lambda 函数不能包含命令 包含 ...
- C语言中malloc函数及free函数用法(定义动态数组及释放)
一.关于静态数组.动态数组 二.malloc()和free()的基本概念以及基本用法 1.函数定义 2.函数用法 3.关于函数使用注意事项 三.malloc()函数分配内存空间的由来 四.malloc ...
- linux使用shell函数扩充命令,Linux Shell系列教程之(十五) Shell函数简介 | Linux大学...
摘要 函数可以将一个复杂功能划分成若干模块,从而使程序结构更加清晰,代码重复利用率更高. 高级语言都支持函数,Shell也不例外.今天就为大家介绍下Shell中函数相关用法. 函数可以将一个复杂功能划 ...
- Linux Shell脚本入门教程系列之(十五) Shell函数简介
本文是Linux Shell脚本系列教程的第(十五)篇,更多Linux Shell教程请看:Linux Shell脚本系列教程 上一篇之后,函数可以将一个复杂功能划分成若干模块,从而使程序结构更加清晰 ...
- Shell函数返回值、删除函数、在终端调用函数
Shell 也支持函数.Shell 函数必须先定义后使用. Shell 函数的定义格式如下: function_name () {list of commands[ return value ] } ...
- Shell函数:Shell函数返回值、删除函数、在终端调用函数
函数可以让我们将一个复杂功能划分成若干模块,让程序结构更加清晰,代码重复利用率更高.像其他编程语言一样,Shell 也支持函数.Shell 函数必须先定义后使用. Shell 函数的定义格式如下: f ...
- Shell 脚本知识回顾 (六) —— Shell 函数
一.Shell函数:Shell函数返回值.删除函数.在终端调用函数 函数可以让我们将一个复杂功能划分成若干模块,让程序结构更加清晰,代码重复利用率更高.像其他编程语言一样,Shell 也支持函数.Sh ...
- [shell]shell函数
函数可以让我们将一个复杂功能划分成若干模块,让程序结构更加清晰,代码重复利用率更高.像其他编程语言一样,Shell 也支持函数.Shell 函数必须先定义后使用.Shell 函数的定义格式如下: [f ...
- php的strcmp函数,php中strcmp函数用法
php中strcmp函数用法 strcmp定义和用法 strcmp() 函数比较两个字符串. 注释:strcmp() 函数是二进制安全的,且对大小写敏感. 提示:该函数与 strncmp() 函数类似 ...
- Shell函数的定义及用法
1.Shell函数 利用Shell函数为报告生成程序添加下内容 输出系统正常运行时间和负载,这是自上次关机或重启之后系统的运行时长,以及在若干时间间隔内,当前运行在处理器上的平均任务量 输出磁盘空间, ...
最新文章
- python函数注释 参数 省略号_解决python 输出是省略号的问题
- Cisco Ensoft
- 硬核 | 关于Linux内核的简明知识
- 信创产业发展应不忘初心牢记使命
- zblog php 外部调用,ZBlogPHP调用指定ID文章的代码GetPost()函数
- Windows Phone开发(44):推送通知第二集——磁贴通知
- 正则表达式 -- 个人笔记
- 大数据分析的环节有哪些
- Retrofit的讲解和使用
- [Jobdu] 题目1037:Powerful Calculator
- Scrapy 发起post请求
- OpenCV与机器视觉
- Enviropro EP100D-08管式土壤水分探针
- windows系统下压力测试工具(cpu使用率,内存使用率,磁盘使用率,磁盘空间)
- 学python必备的英语单词(终身受益)
- ddm模型公式_绝对估值法DDM、DCF、RNAV模型简介
- 中国传统美食网页HTML代码 学生网页课程设计期末作业下载 美食大学生网页设计制作成品下载 DW餐饮美食网页作业代码下载
- SDOI2018 一轮培训划水祭
- 用python爬取小说章节内容
- 第一次搭建ftp遇见的蹩脚的问题