shell脚本:函数

2023-11-12

一、函数:

1.定义:

(1)将命令序列按格式写在一起。

(2)可方便重复使用命令。

2.作用:

(1)避免代码重复。

(2)把大工程分割成若干个小块,代码可读性更强。

3.格式:

(1)格式1:

[root@test1 opt]# vim test2.sh
function fx {  #function 函数名
read -p "请输入一个数字:" a #命令序列
a=$(($a+1))
return 0
}
fx
echo $a
[root@test1 opt]# sh test2.sh 
请输入一个数字:9
10

(2)格式2:

[root@test1 opt]# vim test2.sh

fx () { # 函数名 ()
read -p “请输入一个数字:” a #命令序列
a= ( ( (( ((a+1))
return 0
}
fx
echo $a

[root@test1 opt]# sh test2.sh
请输入一个数字:1
2

(3)实操:

1.计算1-100的和,奇数和,偶数和:
[root@localhost ~]# vim hanshu.sh

jishu () {
 sum1=0
 for ((i=1;i<=100;i+=2))
 do
 sum1=$[$sum1+$i]
 done
}
jishu
echo $sum1

oushu () {
sum2=0
for ((j=2;j<=100;j+=2))
do
sum2=$(($sum2+$j))
done
}
oushu
echo $sum2

total=$(($sum1+$sum2))
echo $total
[root@localhost ~]# sh hanshu.sh 
2500
2550
5050

二、函数传参:

1.定义:

(1)在shell中调用函数时,可以向其传递参数。在函数体内部,通过$n的形式来获取参数的值。

(2)实操:

1.传参:
(1)
[root@localhost ~]# vim hanshu1.sh
sum1 () {
 sum=$[$1+$2]
 echo $sum
}
read -p "请输入第一个参数:" a
read -p "请输入第二个参数:" b
sum1=$[$a+$b]
echo $sum1
[root@localhost ~]# chmod +x hanshu1.sh
[root@localhost ~]# sh hanshu1.sh 
请输入第一个参数:1
请输入第二个参数:2
3
(2)
[root@localhost ~]# vim hanshu1.sh
sum () {
 sum=$(($1+$2))
 echo $sum
}
sum $1 $2
[root@localhost ~]# sh hanshu1.sh 1 2
3

2.函数变量:

(1)作用:仅在当前shell环境中有效,shell变量默认全局有效,将变量限定在函数内部使用local命令。

(2)实操:

1.全局变量:

在这里插入图片描述

2.定义一个函数:
[root@localhost ~]# vim hanshu2.sh
abc () {
echo "inside $i" #没有赋值,调用外部,输出9
let i++
local i  #只在函数内部生效
i=8
echo "inside $i" 8
}
i=9
abc
echo "outside $i" 
[root@localhost ~]# sh hanshu2.sh 
inside 9
inside 8
outside 10

3.递归:

(1)定义:函数调用自己本身的函数。

(2)阶乘(factorial):是基斯顿·卡曼(christian Kramp,1760 - 1826)于1808年发明的运算符号。阶乘,也是数学里的一种术语。
阶乘指从1乘以2乘以3乘以4一直乘到所要求的数。6 12345*6 8 12345678
例如所要求的数是4,则阶乘式是1x2x3x4,得到的积是24,.24就是4的阶乘。 例如所要求的数是6,则阶乘式是1x2x3x…x6,得到的积是720,720就是6的阶乘。例如所要求的数是n,则阶乘式是1x2x3x…n,设得到的积是x,x就是n的阶乘。
在表达阶乘时,就使用“!“来表示。如h阶乘,就表示为h!

(3)实操:

1.阶乘:
[root@localhost ~]# vim jiechen.sh
if [ $1 -eq 1 ]
  then
   echo 1
 else
  local number=$(($1-1))
  local result=$(jiechen $number) #自己乘自己减一
  echo $(($1*$result))
 fi
}
read -p "输入一个数求阶乘:" num
result=`jiechen $num`
echo $result

[root@localhost ~]# sh jiechen.sh
输入一个数求阶乘:6
720
2.递归展示/etc下所有目录文件:
[root@localhost ~]# vim digui.sh
digui () {
for i in `ls $1`
do
 if [ -d "$1/$i" ]
 then
  echo "$2$i"
  digui "$1/$i" "$2"
 else
  echo "$2$i"
fi
done
}
digui $1
echo $i $a
[root@test1 ~]# sh digui.sh wangz
billkin
pp
pp

补充演示:

在这里插入图片描述

在这里插入图片描述

4.函数库:

(1)先写一个函数库,赋权,再开一个脚本调用。

(2)应用:

[root@test1 ~]# vim test1.sh
jianfa () {
result=$(($1-$2))
echo $result
}
chengfa () {
result=$(($1*$2))
echo $result
}
chufa () {
if [ $2 -ne 0 ]
 then
  result=$(($1/$2))
 echo $result
else
 echo "$2不能为0"
fi
}
. /root/test1.sh
read -p "diyige:" first
read -p "dierge:" second
a=`jiafa $first $second`
b=`jianfa $first $second`
c=`chengfa $first $second`
d=`chufa $first $second`

echo $a
echo $b
echo $c
echo $d
[root@test1 ~]# chmod 777 dy.sh(
[root@test1 ~]# sh dy.sh 
diyige:2
dierge:3
5
-1
6
0
[root@test1 ~]# vim dy.sh
. /root/test1.sh
read -p "diyige:" first
read -p "dierge:" second
a=`jiafa $first $second`
b=`jianfa $first $second`
c=`chengfa $first $second`
d=`chufa $first $second`
echo $a
echo $b
echo $c
echo $d
[root@test1 ~]# chmod 777 dy.sh(
[root@test1 ~]# sh dy.sh 
diyige:2
dierge:3
5
-1
6
0

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

shell脚本:函数 的相关文章

随机推荐

  • office word复制图片出错

    前言 今天在使用word文档时 发现在复制图片时 总是复制的不完整 Word中插入图片只显示一行的 图片缺失的部分感觉和文字交织在一起 估计原因是 之前图片复制在word中的标题的位置上了 解决 点击word上方的 正文 然后再复制图片 问
  • 【C++ primer】第一章 快速入门 读书笔记

    1 1 编写简单的c 程序 返回 0值表明程序程序成功执行完毕 非零返回值表明有错误出现 返回值类型必须和函数的返回类型相同 或者可以转换成函数的返回类型 1 1 1 编译与执行程序 1 2 初窥输入 输出 术语 流 试图说明字符是随着时间
  • Python 爬虫库以及库函数总结&&踩坑

    1 Re库的基本使用 Re库介绍 Re库是Python的标准库 主要用于字符串匹配 调用方式 import re 正则表达式的表示类型 raw string类型 原生字符串类型 re库采用raw string类型表示正则表达式 表示为 r
  • Qt文本的淡入淡出

    Qt文本的淡入淡出 对于写在Qlabel中的文本 想对其实现淡入和淡出的特效 需要用到QGraphicsOpacityEffect 并搭配计时器使用 示例如下 h文件 include
  • [虎符ctf2021]你会日志文件分析吗

    SQL盲注 拿到一份日志 毫无头绪 上网查wp得知为sql盲注 得再学 1 看时间和后门的长度 sleep 2 1 HTTP 1 1 200 377 如果正确会休眠两秒 那么就找到377长度的请求 Ctrl F sleep 2 1 HTTP
  • 独立服务器比较虚拟机有什么好处

    1 资源不足 采用虚拟主机服务的用户实际上很难确切地知道到底有多少客户正在同时分享现实服务器的资源 当与您的网站在同一台服务器上的某个 些 网站的访问量很大时 这台服务器的系统结构可能很容易就不堪重负 出现过载 从而大大影响其它网站系统的性
  • Qt 定时器实现循环

    概述 后台进程需要循环时第一时间想到的就是while 但是涉及界面交互时就不那么适用了 例如在Qt主线程中直接使用循环就会导致界面卡死 此时可以使用多线程来解决这个问题 但只是做一些简单的测试工具时 考虑线程大可不必 第二种方法就是在whi
  • c语言rtsp客户端拉流,如何基于C++解决RTSP取流报错问题

    使用g opencv demo cpp o test 会报以下错误 这是我的代码 include include include include include include include include pragma comment
  • Ubuntu 14.04 apt-get update失效解决

    当运行apt get update后出现如下错误时 E Some index files failed to download they have been ignored or old ones used instead 可以将目录下 v
  • centos升级g++7.3.0

    sudo yum install centos release scl sudo yum install devtoolset 7 scl enable devtoolset 7 bash
  • Dubbo分布式日志追踪

    很多互联网公司都用的dubbo分布式框架进行微服务的开发 一个大系统往往会被拆分成很多不同的子系统 并且子系统还会部署多台机器 当其中一个系统出问题了 查看日志十分麻烦 所以我们需要一个固定的流程ID和机器ip地址等来把所有的日志穿起来 当
  • 如何安装vcpk

    如何安装vcpk 要安装 3fd 库 首先你需要安装 vcpkg 包管理器 以下是安装 vcpkg 的步骤 打开一个命令行终端 如 Windows 的命令提示符或 PowerShell 或者 Linux Mac 的终端 克隆 vcpkg 存
  • [云原生专题-53]:Kubesphere云治理-操作-通过Kubesphere应用商店一键部署微服务应用-消息中间件RabbitMQ的安装与部署

    作者主页 文火冰糖的硅基工坊 文火冰糖 王文兵 的博客 文火冰糖的硅基工坊 CSDN博客 本文网址 https blog csdn net HiWangWenBing article details 122933831 目录 前言 第1章
  • exportfs命令、NFS客户端问题、FTP介绍、使用vsftpd搭建ftp

    exportfs命令 参数说明如下 a 全部挂载 或卸载 etc exports文件内的设定 r 重新挂载 etc exports中的设置 此外同步更新 etc exports及 var lib nfs xtab中的内容 u 卸载某一目录
  • python面向对象编程 类与实例 继承与多态 isinstance

    class Student object def init self name gender self name name self gender gender def set gender self gender if gender ma
  • C语言学习

    目录 原码反码和补码 原码 true code 反码 complemental code 补码 ones complement code 溢出的处理 位运算符 移位操作符 lt lt gt gt lt lt 左移 gt gt 右移 按位操作
  • 2023深圳杯 C题无人机协同避障航迹规划 最新论文

    完整论文已发布 目录 无人机协同避障航迹规划 摘要 一 问题重述 1 1 背景 1 2 重述 二 模型的假设 三 符号说明 四 问题分析 4 1 问题一分析
  • IDEA 打开SpringBoot服务控制台,管理多个服务

    IDEA 打开SpringBoot服务控制台 管理多个服务 作者简介 努力的clz 一个努力编程的菜鸟 文章专栏 软件使用技巧 记录一下平时开发过程中 使用各种 编程软件 的一些使用技巧 实现步骤如下 第一步 选择 视图 工具窗口 服务 第
  • 传统数据库也能实现区块链存储

    2019独角兽企业重金招聘Python工程师标准 gt gt gt 本文节选自电子书 Netkiller Architect 手札 延伸阅读 Netkiller Blockchain 手札 微信订阅号 netkiller ebook 微信扫
  • shell脚本:函数

    shell脚本 函数 一 函数 1 定义 2 作用 3 格式 二 函数传参 1 定义 2 函数变量 3 递归 4 函数库 一 函数 1 定义 1 将命令序列按格式写在一起 2 可方便重复使用命令 2 作用 1 避免代码重复 2 把大工程分割