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


运维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.hqwc.cn/news/97708.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

本地电脑搭建Web服务器建立一个属于自己的网页该如何操作呢?

本地电脑搭建Web服务器并用cpolar发布至公网访问 文章目录 本地电脑搭建Web服务器并用cpolar发布至公网访问前言1. 首先在电脑安装PHPStudy、WordPress、cpolar2. 安装cpolar,进入Web-UI界面3. 安装wordpress4. 进入wordpress网页安装程序5. 利用cpolar建立的内网穿…

python安装wind10

一、下载: 官网:Python Releases for Windows | Python.org 二、安装 双击下载的安装程序文件。这将打开安装向导。安装界面图下方两个框的" Use admin privileges wheninstalling py. exe和” Add python. exe to PATH"都要勾选,一定要勾选!一定要勾选…

docker save docker export 区别

docker save用于导出镜像到文件,包含镜像元数据和历史信息;docker export用于将当前容器状态导出至文件,类似快照,所以不包含元数据及历史信息,体积更小,此外从容器快照导入时也可以重新指定标签和元数据信…

Re45:读论文 GPT-1 Improving Language Understanding by Generative Pre-Training

诸神缄默不语-个人CSDN博文目录 诸神缄默不语的论文阅读笔记和分类 论文全名:Improving Language Understanding by Generative Pre-Training 论文下载地址:https://www.mikecaptain.com/resources/pdf/GPT-1.pdf 本文是2018年OpenAI的工作&#xff0c…

软件设计师学习笔记8-操作系统+进程

目录 1.操作系统 1.1操作系统层次图 1.2操作系统的作用 1.3操作系统的任务 2.特殊的操作系统 3.进程 3.1进程的概念 3.2进程与程序 3.3进程与线程 3.4进程的状态 3.4.1三态模型 3.4.2基于三态模型的五态模型 1.操作系统 1.1操作系统层次图 该图片来自希赛软考 1.…

【python】可视化

柱状图 matplotlib之pyplot模块之柱状图(bar():基础参数、外观参数)_plt.bar_mighty13的博客-CSDN博客 bar()的基础参数如下: x:柱子在x轴上的坐标。浮点数或类数组结构。注意x可以为字符串数组! height&…

无需公网IP,在家SSH远程连接公司内网服务器「cpolar内网穿透」

文章目录 1. Linux CentOS安装cpolar2. 创建TCP隧道3. 随机地址公网远程连接4. 固定TCP地址5. 使用固定公网TCP地址SSH远程 本次教程我们来实现如何在外公网环境下,SSH远程连接家里/公司的Linux CentOS服务器,无需公网IP,也不需要设置路由器。…

SD卡中了蠕虫病毒怎么办?清除病毒以及数据恢复方法

蠕虫病毒是近年来非常流行的病毒之一,它主要通过U盘、网络等途径进行传播。如果你的SD卡不幸感染了蠕虫病毒,可能会导致数据丢失。那么,如何进行数据恢复呢?同时,当SD卡中感染了蠕虫病毒时,我们应该采取什么…

java八股文面试[多线程]——CompletableFuture

1 CompletableFuture介绍 平时多线程开发一般就是使用Runnable,Callable,Thread,FutureTask,ThreadPoolExecutor这些内容和并发编程息息相关。相对来对来说成本都不高,多多使用是可以熟悉这些内容。这些内容组合在一起…

js获得相对路径文件,并上传到服务器

如何通过js获得相对路径文件 已知一个相对路径文件,如何使用js将该文件读取为File格式,最后上传到服务器中呢。 1.最简单的解决方案——fetch 代码 import ./index.scss// js通过相对路径获取文件 function FetchGetLocalFile() {const fetchLocalFile …

ios 运行ipa包 日志查看方式

方法一: 使用ideviceinstaller工具 # 安装ipa命令 brew install ideviceinstaller ideviceinstaller -i xxx.ipa# 查看运行日志 idevicesyslog# idevicesyslog 查找命令 idevicesyslog | grep test -A 3 -B 2 # 输出关键字所在行后3行,前2行) idevic…

解决IDEA中java的system.properties乱码问题

在拉了别人的代码到本地后发现system.properties中中文注释都变成了乱码,故记录下解决步骤,供参考,我的系统是mac系统 1、在IDEA中打开设置,IDEA--->Preferences 2、点击Editor-->File Encodings 3、图中三处选择UTF-8&…