运维Shell脚本小试牛刀(六): Shell中的函数|本地变量

news2024/12/26 12:45:36


运维Shell脚本小试牛刀(一)

运维Shell脚本小试牛刀(二)

运维Shell脚本小试牛刀(三)::$(cd $(dirname $0); pwd)命令详解

运维Shell脚本小试牛刀(四): 多层嵌套if...elif...elif....else fi_蜗牛杨哥的博客-CSDN博客

Cenos7安装小火车程序动画

运维Shell脚本小试牛刀(五):until循环

运维Shell脚本小试牛刀(六): Shell中的函数认知



一: Shell中函数认知 

shell中定义函数,可以更加方便的实现模块化, 函数是一系列命令的集合堆砌实现某些功能的代码块,  Shell中定义函数的语法:

 1.1:定义函数方法

function function_name() {

     command;

     command2

     command3

      [  return int; ]  # 参数返回,return 语句时可选择的。如果没有return 语句,则以函数最后一        条命令的运行结果作为返回值;如果使用return 语句, 则返回return 后跟数值n (数值范            围:   0~255)

 } 


注意: 如果用function关键字,可以省略括号"()"。函数体,符合命令块,是包含在{}大括号之间的命令列表;也可以在一行内定义函数,此时,函数体内的各命令之间必须用分号";"隔开


function name { command1; command2; command3; }

或者

name() {  command1; command2; command3;  }

1.2: 语法糖式定义函数

function_name() {

     command;

     command2

     command3

      [  return int; ]  # 参数返回,return 语句时可选择的。如果没有return 语句,则以函数最后一       条命令的运行结果作为返回值;如果使用return 语句, 则返回return 后跟数值n (数值范围:       0~255)

}

二:Shell脚本中的变量全局的,使用local限定变量范围

用户Shell中的变量是全局的,所以在函数中修改同名的变量会,修改Shell脚本中的同名变量的值,因此,为避免参数不必要的错误, 可以使用local关键字来修饰;且local只能在函数中使用,其修饰变量的函数的作用范围只在函数内;

[root@www functiondic]# cat locatparamfunction.sh 
#!/bin/bash -
#==================================================================================================================
#
#
#                           FILE:  localparamfunction.sh
#                           USAGE: ./localparamfunction.sh
#    DESCRIPTION:  shell脚本中变量都是全局变量,在函数中修改该变量会修改脚本中的变量,这在某些情况下可能会产生问题
#        OPTIONS: -------
#        REQUIREMENTS: ---------

#        BUGS: ------
#        NOTES: -------- 
#        AUTHOR: ---------YangGe (TOM) ,YangGe.freedom@icloud.com
#    ORGANIZATION:
#        CREATED: 2023-8-24 09:11:20    
#        REVISION: --------
#
#
#
#
#
#====================================================================================================================
# 定义函数create_logFile
function create_logFile(){
   # 修改变量d的值
   d=$1
   echo "create_logFile(): d is set to $d"
   echo "=======================================Before create_logFile():==========================================="

}
# 定义变量d
d=/usr/local/example/logs/zookeeper.log

echo "Before calling create_logFile() d is set to $d"

# 调用函数后,create_logFile(),并指定一个参数
create_logFile "/usr/local/example/logs/diskUsage.log"

echo "=========================================After create_logFile():================================================"
echo "After calling create_logFile(): d is set to $d"
 

2.1:测试Shell脚本中与函数中命名变量

[root@www functiondic]# ./locatparamfunction.sh 
Before calling create_logFile() d is set to /usr/local/example/logs/zookeeper.log
create_logFile(): d is set to /usr/local/example/logs/diskUsage.log
=======================================Before create_logFile():===========================================
=========================================After create_logFile():================================================
After calling create_logFile(): d is set to /usr/local/example/logs/diskUsage.log
 

三: local修饰本地变量

[root@www functiondic]# cat localsetparamfunction.sh 
#!/bin/bash -
#==================================================================================================================
#
#
#                           FILE:  localparamfunction.sh
#                           USAGE: ./localparamfunction.sh
#    DESCRIPTION:  shell脚本中变量都是全局变量,在函数中修改该变量会修改脚本中的变量,这在某些情况下可能会产生问题,local变量只能在函数中使用,被该关键字修饰的变量指定作用范围只属于该函数本身
#        OPTIONS: -------
#        REQUIREMENTS: ---------

#        BUGS: ------
#        NOTES: -------- 
#        AUTHOR: ---------YangGe (TOM) ,YangGe.freedom@icloud.com
#    ORGANIZATION:
#        CREATED: 2023-8-24 09:11:20    
#        REVISION: --------
#
#
#
#
#
#====================================================================================================================
# 定义全局变量
dic=/usr/local/example/logs/zookeeper.log

# 定义一个函数create_log_local()

create_log_local(){
   # 定义一个本地变量dic
   local dic=$1
   echo "create_log_local(): dic is set to $dic"
  
}

echo "Before calling create_log_local() dic is set to $dic"

echo "=====================Before create_log_local()==============================================="

# 调用函数create_log_local(): 并指定一个参数

create_log_local /etc/yes/*

echo "====================After create_log_local()==================================================="
echo "After calling create_log_local(): dic is set to $dic"
echo "====================After create_log_local()==================================================="
 

3.1: 测试local修饰的本地变量

 [root@www functiondic]# ./localsetparamfunction.sh 
Before calling create_log_local() dic is set to /usr/local/example/logs/zookeeper.log
=====================Before create_log_local()===============================================
create_log_local(): dic is set to /etc/yes/*
====================After create_log_local()===================================================
After calling create_log_local(): dic is set to /usr/local/example/logs/zookeeper.log
====================After create_log_local()===================================================

四: 函数的返回值 

 4.1 使用函数的返回值

[root@www functiondic]# cat functionreturnvalue.sh 
#!/bin/bash -
#==================================================================================================================
#
#
#                           FILE:  localparamfunction.sh
#                           USAGE: ./localparamfunction.sh
#    DESCRIPTION:  shell脚本中函数的返回值测试
#        OPTIONS: -------
#        REQUIREMENTS: ---------

#        BUGS: ------
#        NOTES: -------- 
#        AUTHOR: ---------YangGe (TOM) ,YangGe.freedom@icloud.com
#    ORGANIZATION:
#        CREATED: 2023-8-24 09:11:20    
#        REVISION: --------
#
#
#
#
#
#====================================================================================================================
# 定义一个检查进程号是否存在的函数
checkpid(){
  # 定义一个本地变量i
  local i
  
  # 使用for循环遍历传递给该函数的所有的变量
  for i in $*
  do 
     # 如果目录/proc/$i存在,则执行此函数返回0
     # 在一般的Linux系统中,如果进程正在运行,则在/proc目录下回存在一个进程号命令的子目录
     [ -d "/proc/$i" ] && return 0
  done

  # 返回1
  return 1
     

}

# 调用函数checkpid
checkpid $pid1 $pid1399 $pid3

# 如果上面的执行成功,即$?的值等于0,则执行if中的语句
if [ $? == 0 ]
then
  echo "The one of them is running......"
else
  echo "These PIDS are not running......"

fi
 

4.2 测试检查PID

 [root@www functiondic]# ./functionreturnvalue.sh 
These PIDS are not running......
[root@www functiondic]# vi functionreturnvalue.sh 
[root@www functiondic]# ./functionreturnvalue.sh 
These PIDS are not running......

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

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

相关文章

14.Redis 主从复制

Redis 主从复制 redis 主从复制配置 redis 主从复制启动 redis 主从复制断开 redis 主从复制主从复制构特点主从复制的拓扑结构一主一从⼀主多从树状主从 主从复制原理数据同步psync 运行流程全量复制流程部分复制流程实时复制 关于从节点何时晋升成主节点总结 redis 主从复制 …

iKeyPrime完美解4G信号,可以登录iCloud,有消息通知,支持最新iOS16.6。

iKeyPrime是一款绕过激活锁界面的解锁工具,可以激活所有iPhone苹果手机,二网/三网恢复信号,并且支持插卡接打电话、收发短信、4G流量上网,支持iCloud登录,有消息通知,支持iPhone5S~X的所有型号,…

车规微控制器的ECC机制及EMU外设

车规微控制器的ECC机制及EMU外设 文章目录 车规微控制器的ECC机制及EMU外设引言ECC的基本原理ECC RAM的访问方式ECC RAM的初始化SRAM ECC错误注入及EMU外设Flash ECC校验参考文献 引言 ECC是微控制器系统中,用于保障信息安全的常用机制,主要是避免存储设…

gRPC远程进程调用

gRPC远程进程调用 rpc简介golang实现rpc方法一net/rpc库golang实现rpc方法二jsonrpc库grpc和protobuf在一起第一个grpc应用grpc服务的定义和服务的种类grpc stream实例1-服务端单向流grpc stream实例2-客户端单向流grpc stream实例3-双向流grpc整合gin

转型的每一步都至关重要!大运新能源远勤山谈品牌发展之道

“我们转型新能源乘用车,一开始选择研发生产悦虎和远志M1两款中低价位车型是为了“练练手”。我们用这两款车型探路,去熟悉和了解新能源市场,通过一步一步踏踏实实把产品做好,逐渐获得消费者认可,同时也为今后研发其他…

一周AIGC丨中国境内 151 个算法完成备案,腾讯、百度等 11 家 AI 大模型产品陆续上线...

近日,网信办官网公开发布第二批境内深度合成服务算法备案信息。至此,国内已有 151 个算法通过深度合成服务算法名单的备案。腾讯、百度等 11 家 AI 大模型产品完成备案陆续上线,标志着大模型行业在我国正式进入产品化落地阶段,大模…

链动2+1模式,让你的美妆消费变成收入来源

美妆,是一个与女性息息相关的话题,也是一个巨大的市场。据统计,2022年,中国美妆市场规模达到了1.3万亿元,占全球美妆市场的20%。美妆消费者的需求日益多样化和个性化,对产品的品质、效果、安全性等方面有着…

Nougat 深度剖析

Nougat 深度剖析 项目地址:https://github.com/facebookresearch/nougat 论文地址:Nougat: Neural Optical Understanding for Academic Documents 0 背景 近日,MetaAI又放了大招,他们提出了一种全新的端到端的OCR模型&#x…

spring boot项目上传头像

应用还是验证码使用的原理;但是代码逻辑却有所不同。 逻辑前端传给后端,然后写入本机磁盘去,文件名用uuid避免重复。写完就可以顺带把文件名保存到数据库里。上传就这样子。 怎么取用的;还是通过配置映射的方式;通过sr…

电商企业固定资产怎么管理

电商固定资产管理需要建立标准的固定资产管理制度,从规则上进行约束。同时,引入固定资产管理系统,从流程上起到直接提升效果的方式。电商标准的固定资产管理制度因公司而异,但通常包括以下内容:  固定资产的定义和分…

B2B企业常用的邮件营销推广策略

互联网在经历了十多年的高速增长后,近年来互联网流量逐渐饱和,企业获客成本越发高涨以及拓客增长渐渐缓慢,尤其对于专业门槛高、行业较为垂直的B2B企业而言,网络营销一直是企业获客中非常重要的一环。如何获得更多的客户、降低获客…

【Python爬虫笔记】爬虫代理IP与访问控制

一、前言 在进行网络爬虫的开发过程中,有许多限制因素阻碍着爬虫程序的正常运行,其中最主要的一点就是反爬虫机制。为了防止爬虫程序在短时间内大量地请求同一个网站,网站管理者会使用一些方式进行限制。这时候,代理IP就是解决方…

VUE for循环 默认选中第一条数据

for循环渲染列表默认选中第一条数据 点击其他选项切换数据 <div><div class"Subtitle" style"padding: 5px 40px;">项目清单</div><div class"project-manifest"><div v-for"(item, index) in project" :…

三年前端还不会配置Nginx?刷完这篇就够了

什么是Nginx Nginx是一个开源的高性能HTTP和反向代理服务器。它可以用于处理静态资源、负载均衡、反向代理和缓存等任务。Nginx被广泛用于构建高可用性、高性能的Web应用程序和网站。它具有低内存消耗、高并发能力和良好的稳定性&#xff0c;因此在互联网领域非常受欢迎。 为…

SpringBoot的HandlerInterceptor拦截器使用方法

一、创建拦截器 通过实现HandlerInterceptor接口创建自己要使用的拦截器 import org.springframework.context.annotation.Configuration; import org.springframework.web.servlet.HandlerInterceptor; import org.springframework.web.servlet.ModelAndView; import javax.…

Python Fiddler抓包工具实战案例:获取公众号(pc客户端)数据

前言 嗨喽~大家好呀&#xff0c;这里是魔王呐 ❤ ~! python更多源码/资料/解答/教程等 点击此处跳转文末名片免费获取 开发环境: python 3.8 运行代码 pycharm 2021.2 辅助敲代码 requests 第三方模块 Fiddler 汉化版 抓包的工具 配置Fiddler环境 先打开Fiddler&#x…

AFNetworking 实现下载请求的原理过程

实现下载的流程 一 生成一个 NSMutableURLRequest二 创建 NSURLSessionTask创建 URLSessionTask过程解析代理方法调用过程这样设计的原因 一 生成一个 NSMutableURLRequest NSMutableURLRequest *request [[AFHTTPRequestSerializer serializer] requestWithMethod:"GET&…

【三相太阳能光伏系统控制】在线性和非线性负载条件下模拟额定功率为33kW的三相并网光伏系统,提高电能质量研究(Simulink)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

C#,《小白学程序》第十三课:阶乘(Factorial)的计算方法与代码

1 文本格式 /// <summary> /// 阶乘的非递归算法 /// </summary> /// <param name"a"></param> /// <returns></returns> private int Factorial_Original(int a) { int r 1; for (int i a; i > 1; i--) { …

java八股文面试[数据库]——最左匹配原则

最佳左前缀法则 最佳左前缀法则: 如果创建的是联合索引,就要遵循该法则. 使用索引时&#xff0c;where后面的条件需要从索引的最左前列开始使用,并且不能跳过索引中的列使用。 最左匹配原则是什么&#xff1f; 简单来讲&#xff1a;在联合索引中&#xff0c;只有左边的字段被…