shell脚本之函数

news2024/10/1 9:42:48

shell函数

函数的组成:函数名和函数体

函数的格式

function 函数名 {
命令序列
}
function cat {cat /etc/passwd}

函数名() {
命令序列
}
cat () {cat /etc/passwd}

function 函数名 (){
命令序列
}
function cat() {cat /etc/passwd}

函数相关命令

declare -F #查看当前已定义的函数名
declare -f #查看当前已定义的函数定义
unset 函数名 #删除函数

函数注意事项

注意事项

  1. 直接写 函数中调用函数 直接写函数名

  2. 同名函数 后一个生效

  3. 调用函数一定要先定义

  4. 每个函数是独立的

函数返回值

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

使用原则:

  1. 函数一结束就去返回值,应为$?变量只返回执行的最后一条命令的退出返回码
  2. 退出码必须是0-255,超出的值将为除以256取余
#!/bin/bash
test1 () {
        read -p "请输入一个数字:" num
        return $[$num*2]
}
test1
echo $?

在这里插入图片描述

#return 用法
user () {
if  [ $USER = root ] 
then
echo "这是管理员用户"
else
echo "这不是管理员用户"
return 1
fi
}
user #调用函数

在这里插入图片描述

函数的传参数

test1 (){
echo $1
echo $2
}
#外边脚本的位置变量
test1 $2 $1

函数的作用范围

函数在shell脚本中仅在当前的shell环境中有效
shell脚本中变量默认全局有效
将变量限定在函数内部使用local命令

[root@localhost ~]name=meng
[root@localhost ~]xm () { name=li ; echo $name; }
[root@localhost ~]xm
wang
[root@localhost ~]echo $name  
wang

加上local变量即可将变量限制在函数内
[root@localhost ~]name=qian;func1 () { local name=li ;echo $name; };echo $name
meng
[root@localhost ~]xm
wang

在这里插入图片描述

函数文件的使用

将函数写入文件中直接调用
os (){
if
grep -qi 'centos' /etc/os-release
then
echo "centos"
elif
grep -qi 'ubuntu' /etc/os-release
then
echo "ubuntu"
else
echo "this system not support"
fi
}
os
[root@localhost data]. functions 
centos7

在这里插入图片描述

将函数文件写入脚本中调用
#!/bin/bash
. /mnt/functions  #写函数文件的绝对路径

在这里插入图片描述

函数的递归

函数调用自己本身的函数

函数方式的阶乘
fact (){
if [ $1 -eq 1 -o $1 -eq 0 ]
then
echo 1
else
temp=$[$1-1]		#求前一个数
result=$(fact $temp)	#求前一个数的阶乘结果
echo $[$1*$result]	#求现在数的阶乘
fi
}
read -p "输入计算阶乘的数" num
result=$(fact $num)
echo $result

在这里插入图片描述

函数的运用

使用函数判断操作系统版本脚本
# 定义函数
os (){
if
grep -qi 'centos' /etc/os-release
then
echo "centos"
elif
grep -qi 'ubuntu' /etc/os-release
then
echo "ubuntu"
else
echo "this system not support"
fi
}
#调用函数
os

if [ `os` = centos ]  #os调用命令执行结果
then
yum install httpd -y
elif [ `os` = ubuntu ]
then
apt install apache2 -y
else
echo "不支持"
fi

在这里插入图片描述

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/905442.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

记录每日LeetCode 2236. 判断根结点是否等于子结点之和 Java实现

题目描述: 给你一个 二叉树 的根结点 root,该二叉树由恰好 3 个结点组成:根结点、左子结点和右子结点。 如果根结点值等于两个子结点值之和,返回 true ,否则返回 false 。 初始代码: /*** Definition f…

Cpp学习——类与对象3

目录 一,初始化列表 1.初始化列表的使用 2.初始化列表的特点 3.必须要使用初始化列表的场景 二,单参数构造函数的隐式类型转换 1.内置类型的隐式类型转换 2. 自定义类型的隐式类型转换 3.多参数构造函数的隐式类型转换 4.当你不想要发生隐式类型转换…

7-7 找最小的字符串

分数 15 全屏浏览题目 切换布局 作者 张泳 单位 浙大城市学院 本题要求编写程序,针对输入的N个字符串,输出其中最小的字符串。 输入格式: 输入第一行给出正整数N;随后N行,每行给出一个长度小于80的非空字符串&…

js 中的原型

JavaScript规定,每一个构造函数都有一个prototype属性,指向另一个对象,所以我们也称为原型对象。这个对象可以挂载函数,对象实例化不会多次创建原型上函数,节约内存。我们可以把那些不变的方法,直接定义在p…

NPM 为自己创建的组织付费

目录 1、升级为付费组织计划 2、查看、下载和通过电子邮件发送组织的收据 2.1 查看数据 3、更新组织账单设置 3.1 更新信用卡信息 3.2 更新帐单收据电子邮件和额外收据信息 4、降级为免费组织 1、升级为付费组织计划 作为组织所有者,您可以将免费组织计划升级…

智能监控系统的守护者:人工智能行为识别技术的崛起与发展

人工智能助力监控系统:行为识别在安全监控中的应用与挑战 摘要: 随着人工智能技术的快速发展,行为识别在监控系统中的应用逐渐成为安全监控领域的重要工具。本文将详细探讨人工智能行为识别技术在监控系统中的应用,以及在实际应用…

Tween.js动画函数使用demo

案例&#xff1a; 小球的运动数字的自增 demo <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><meta name"viewport" content"widthdevice-width, initial-scale1.0" /><title&g…

AI 绘画Stable Diffusion 研究(十三)SD数字人制作工具SadTlaker使用教程

免责声明: 本案例所用安装包免费提供&#xff0c;无任何盈利目的。 大家好&#xff0c;我是风雨无阻。 想必大家经常看到&#xff0c;无论是在产品营销还是品牌推广时&#xff0c;很多人经常以数字人的方式来为自己创造财富。而市面上的数字人收费都比较昂贵&#xff0c;少则几…

spring事件监听event(默认的mq)

文章目录 前言一、event是什么&#xff1f;二、使用步骤1.事件2.事件监听3.发布事件 三、测试结果总结 前言 项目中的业务难免是相互关联的,但是代码中我们应该尽量做到低耦合,常见的做法就是引入mq来作为松耦合的一种手段; 其实最常见的解耦和就是接口了,MVC直接通过接口(约定…

反弹shell bash -i命令

目录 0x01 什么是反弹shell&#xff1f;   0x02 命令拆分详解   0x03 文件描述符   0x04 shell 输入/输出重定向   0x05 输入输出结合获得shell 什么是反弹shell&#xff1f; 假设有两台主机 A(控制端) B(被控端) 正向shell&#xff0c;就是ssh、Telnet的连接&#xf…

YOLOv5源码中的参数超详细解析(4)— 推理部分detect.py

前言&#xff1a;Hello大家好&#xff0c;我是小哥谈。YOLOv5是一种先进的目标检测算法&#xff0c;它可以实现快速和准确的目标检测。detect.py是YOLOv5项目目录结构中的一个重要的脚本文件&#xff0c;它用于执行目标检测任务&#xff0c;可以通过命令行参数指定要检测的图像…

【三维重建】Factor Fields: 超越神经场的统一框架

论文&#xff1a;Factor Fields: A Unified Framework for Neural Fields and Beyond 文章&#xff1a;https://arxiv.org/abs/2302.01226 项目&#xff1a;https://apchenstu.github.io/FactorFields/ 文章目录 摘要一、前言二、Factor Fields2.1.字典场&#xff08;DiF&#…

二级MySQL(三)——数据库的增删改查

创建一个新的数据库&#xff1a; CREATE DATABASE db_school DEFAULT CHARACTER SET GB2312 DEFAULT COLLATE GB2312_chinese_ci&#xff1b; 查找创建的数据库&#xff08;全部&#xff09;&#xff1a; 其他的是SQL自带的数据库 查阅我们自己创建的字符集以及对应的字符集…

Qt 实现 360 安全卫士

作者&#xff1a; 一去、二三里 个人微信号&#xff1a; iwaleon 微信公众号&#xff1a; 高效程序员 回想起来&#xff0c;这也算是一个有故事的代码。虽然时间比较久远&#xff0c;但还是记忆犹新。 那就简单说说吧&#xff0c;也不枉费当年的一片心血&#xff01; 说说我的…

java可变字符串

一、常用方法 以StringBuilder为例 1、append(String str) 添加 StringBuilder str new StringBuilder("hello"); System.out.println(str);//在源字符串后添加world StringBuilder add str.append("world"); System.out.println(add);//结果helloworl…

Platypus:Quick,Cheap,and Powerful Refinement of LLMs

Platypus:Quick,Cheap,and Powerful Refinement of LLMs IntroductionMethod2.1 Curating Open- PlatypusRemoving similar&duplicate questionsContamination CheckFine-tuning & mergingResult参考Introduction 现在大模型已经取得很不错的结果,如何把大模型的能…

PL 侧驱动和fpga 重加载的方法

可以解决很多的问题 时钟稳定后加载特定fpga ip &#xff08;要不内核崩的一塌糊涂&#xff09;fpga 稳定复位软件决定fpga ip 加载的时序 dluash load /usr/local/scripts/si5512_setup.lua usleep 30 mkdir -p /lib/firmware cp -rf /usr/local/firmare/{*.bit.bin,*.dtbo} …

css 实现svg动态图标效果

效果演示&#xff1a; 实现思路&#xff1a;主要是通过css的stroke相关属性来设置实现的。 html代码: <svgt"1692441666814"class"icon"viewBox"0 0 1024 1024"version"1.1"xmlns"http://www.w3.org/2000/svg"p-id"…

jps(JVM Process Status Tool):虚拟机进程状况工具

jps&#xff08;JVM Process Status Tool&#xff09;&#xff1a;虚拟机进程状况工具 列出正在运行的虚拟机进程&#xff0c;并显示虚拟机执行主类名称&#xff08;Main Class&#xff0c;main()函数所在的类&#xff09;以及这些进程的本地虚拟机唯一ID&#xff08;LVMID&am…

VMware上搭建的虚拟机突然本地无法连接服务器

长时间没有使用VMware 虚拟机了&#xff0c;今天突然登录上去&#xff0c;启动虚拟服务器后发现本地等不了了&#xff0c; 经过排查发现是开启了&#xff1a;VirtualBox Host-Only Network 关闭之后就本机就可以直连服务器了