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函数(用法及定义)相关推荐

  1. python中的lambda函数用法--无需定义函数名的函数或子程序,避免代码充斥着大量单行函数

    匿名函数lambda:是指一类无需定义标识符(函数名)的函数或子程序. lambda 函数可以接收任意多个参数 (包括可选参数) 并且返回单个表达式的值. 要点: lambda 函数不能包含命令 包含 ...

  2. C语言中malloc函数及free函数用法(定义动态数组及释放)

    一.关于静态数组.动态数组 二.malloc()和free()的基本概念以及基本用法 1.函数定义 2.函数用法 3.关于函数使用注意事项 三.malloc()函数分配内存空间的由来 四.malloc ...

  3. linux使用shell函数扩充命令,Linux Shell系列教程之(十五) Shell函数简介 | Linux大学...

    摘要 函数可以将一个复杂功能划分成若干模块,从而使程序结构更加清晰,代码重复利用率更高. 高级语言都支持函数,Shell也不例外.今天就为大家介绍下Shell中函数相关用法. 函数可以将一个复杂功能划 ...

  4. Linux Shell脚本入门教程系列之(十五) Shell函数简介

    本文是Linux Shell脚本系列教程的第(十五)篇,更多Linux Shell教程请看:Linux Shell脚本系列教程 上一篇之后,函数可以将一个复杂功能划分成若干模块,从而使程序结构更加清晰 ...

  5. Shell函数返回值、删除函数、在终端调用函数

    Shell 也支持函数.Shell 函数必须先定义后使用. Shell 函数的定义格式如下: function_name () {list of commands[ return value ] } ...

  6. Shell函数:Shell函数返回值、删除函数、在终端调用函数

    函数可以让我们将一个复杂功能划分成若干模块,让程序结构更加清晰,代码重复利用率更高.像其他编程语言一样,Shell 也支持函数.Shell 函数必须先定义后使用. Shell 函数的定义格式如下: f ...

  7. Shell 脚本知识回顾 (六) —— Shell 函数

    一.Shell函数:Shell函数返回值.删除函数.在终端调用函数 函数可以让我们将一个复杂功能划分成若干模块,让程序结构更加清晰,代码重复利用率更高.像其他编程语言一样,Shell 也支持函数.Sh ...

  8. [shell]shell函数

    函数可以让我们将一个复杂功能划分成若干模块,让程序结构更加清晰,代码重复利用率更高.像其他编程语言一样,Shell 也支持函数.Shell 函数必须先定义后使用.Shell 函数的定义格式如下: [f ...

  9. php的strcmp函数,php中strcmp函数用法

    php中strcmp函数用法 strcmp定义和用法 strcmp() 函数比较两个字符串. 注释:strcmp() 函数是二进制安全的,且对大小写敏感. 提示:该函数与 strncmp() 函数类似 ...

  10. Shell函数的定义及用法

    1.Shell函数 利用Shell函数为报告生成程序添加下内容 输出系统正常运行时间和负载,这是自上次关机或重启之后系统的运行时长,以及在若干时间间隔内,当前运行在处理器上的平均任务量 输出磁盘空间, ...

最新文章

  1. python函数注释 参数 省略号_解决python 输出是省略号的问题
  2. Cisco Ensoft
  3. 硬核 | 关于Linux内核的简明知识
  4. 信创产业发展应不忘初心牢记使命
  5. zblog php 外部调用,ZBlogPHP调用指定ID文章的代码GetPost()函数
  6. Windows Phone开发(44):推送通知第二集——磁贴通知
  7. 正则表达式 -- 个人笔记
  8. 大数据分析的环节有哪些
  9. Retrofit的讲解和使用
  10. [Jobdu] 题目1037:Powerful Calculator
  11. Scrapy 发起post请求
  12. OpenCV与机器视觉
  13. Enviropro EP100D-08管式土壤水分探针
  14. windows系统下压力测试工具(cpu使用率,内存使用率,磁盘使用率,磁盘空间)
  15. 学python必备的英语单词(终身受益)
  16. ddm模型公式_绝对估值法DDM、DCF、RNAV模型简介
  17. 中国传统美食网页HTML代码 学生网页课程设计期末作业下载 美食大学生网页设计制作成品下载 DW餐饮美食网页作业代码下载
  18. SDOI2018 一轮培训划水祭
  19. 用python爬取小说章节内容
  20. 第一次搭建ftp遇见的蹩脚的问题

热门文章

  1. da0809 c语言程序,ADC0809做AD转换和DA转换的C程序.doc
  2. omnipeek安装与抓包
  3. Word 2007 学习中的问题
  4. eNSP 防火墙配置入门
  5. linux can测试程序,Linux CAN Shell 测试脚本程序
  6. Python numpy求众数
  7. The href attribute requires a valid value to be accessible
  8. 【通信】【2】《宽带太赫兹通信技术》的笔记和一些简单的词汇的意思(误
  9. Windows优化大师
  10. COOX培训材料 — SCADA(1.Valve)