运维Shell脚本小试牛刀(七):在函数文脚本件中调用另外一个脚本文件中函数|函数递归调用|函数后台执行


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

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

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

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

Cenos7安装小火车程序动画

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

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

运维Shell脚本小试牛刀(七):从函数文件中调用另外一个脚本文件中函数


简介: 从函数文件中调用函数

你可以把所有的函数存储在一个脚本文件

你可以把所有的函数加载到当前脚本文件或者时命令行

加载函数文件的所有函数的语法如下:

. /path/to/your/functions.sh


一: 编写函数文件

[root@www dicfor]# cat myfunctions.sh
#==================================================================================================================
#
#
#                           FILE:  myfunctions.sh
#                           USAGE: ./myfunctions.sh
#    DESCRIPTION:   函数定义:从函数文件中调用函数,可以把所有的函数存储在一个文件中,然后把所有的函数加载到当前脚本或是命令行
#        OPTIONS: -------
#        REQUIREMENTS: ---------

#        BUGS: ------
#        NOTES: -------- 
#        AUTHOR: ---------YangGe (TOM) ,YangGe.freedom@icloud.com
#    ORGANIZATION:
#        CREATED: 2023-8-24 09:11:20    
#        REVISION: --------
#
#
#
#
#
#====================================================================================================================
# 加载函数文件中的所有函数的语法如下: . /path/to/your/functions.sh

# 定义变量
declare -r TRUE=0
declare -r FALSE=0
declare -r PASSWD_FILE=/etc/passwd

###################################################################################################################
#
#   用途: 将字符串转换为小写
#     参数
#       $1 -> 要转换为小写的字符串
#
#
#
#
####################################################################################################################
function to_lower() {
  # 定义一个本地变量str
  local str="$@"
  # 定义本地变量output
  local output
  # 将变量str的值转换为小写符赋值给变量output
  output=$(tr ' [A-Z] ' ' [a-z] '<<<"${str}")
  echo $output

}

###################################################################################################################
#
#   用途: 如果脚本root用户执行则返回true
#     参数 无
#   返回值: True或者Flase
#
#
#
#
####################################################################################################################

function is_root()
{
  # 如果运行此脚本的账号的uid等于0,则返回0,否则返回1
  [ $(id -u) -eq 0 ] && return $TRUE || return $FALSE


}
###################################################################################################################
#
#   用途: 如果用户名存在于文件/etc/passwd 中则返回true
#     参数
#       $1 (用户名) -> 要在文件/etc/passwd 中检查的用户名
#       返回值: True 或者 False
#
#
#
#
####################################################################################################################
function is_user_exits()
{
   # 定义本地变量u
   local u="$1"
   # 如果文件/etc/passwd中存在以变量$u的值为开头的行,则返回0,否则返回1
   grep -q "^${u}" $PASSWD_FILE && return $TRUE || return $FALSE

}
 

二: 加载函数文件到当前shell环境


[root@www dicfor]# pwd
/usr/local/example/dicfor
[root@www dicfor]# . /usr/local/example/dicfor/myfunctions.sh
-bash: declare: TRUE: 只读变量
-bash: declare: FALSE: 只读变量
-bash: declare: PASSWD_FILE: 只读变量
 

三: 编写加载myfunctions.sh函数文件的脚本文件 


[root@www dicfor]# cat myfunctionsdemo.sh 
#==================================================================================================================
#
#
#                           FILE:  functionsdemo.sh
#                           USAGE: ./functionsdemo.sh
#    DESCRIPTION:   函数定义,在该文件中加载一个函数文件myfunctions.sh到该脚本文件中
#        OPTIONS: -------
#        REQUIREMENTS: ---------

#        BUGS: ------
#        NOTES: -------- 
#        AUTHOR: ---------YangGe (TOM) ,YangGe.freedom@icloud.com
#    ORGANIZATION:
#        CREATED: 2023-8-24 09:11:20    
#        REVISION: --------
#
#
#
#
#
#====================================================================================================================
# 加载函数文件myfunctions.sh
# 这里的路径需要根据你的实际环境作出跳转
. /usr/local/example/dicfor/myfunctions.sh

# 定义本地变量
# var1时没有被myfunctions.sh使用的
var1="The Mahabharata is the longest and,arguably,one of the greatest epicpoems is any language.."

# 调用函数is root , 指定成功或失败,会分别打印不同的信息
is_root && echo "You are logged in as root." || echo "You are not logged in as root"

# 调用函数is_use_exits
is_user_exits "mysql" && echo "Account found." || echo "Account not found."

# 打印变量的值var1
echo -e "*** Orignal quote: \n${var1}" 

# 调用函数to_lower()
# 将#var1 作为参数传递给to_lower()

# 在echo 内使用的命令替换
echo -e "*** Lowercase version: \n$(to_lower ${var1})"
 

四: 执行该脚本|看看该脚本是否已调用引入的脚本函数


[root@www dicfor]# ./myfunctionsdemo.sh 
You are logged in as root.
Account found.
*** Orignal quote: 
The Mahabharata is the longest and,arguably,one of the greatest epicpoems is any language..
*** Lowercase version: 
the mahabharata is the longest and,arguably,one of the greatest epicpoems is any language..

五: 函数递归调用 

[root@www functiondic]# cat functionnestedCalled.sh 
#==================================================================================================================
#
#
#                           FILE:  functionNestedCalled.sh
#                           USAGE: ./functionNestedCalled.sh
#    DESCRIPTION:  Shell中函数递归调用
#        OPTIONS: -------
#        REQUIREMENTS: ---------

#        BUGS: ------
#        NOTES: -------- 
#        AUTHOR: ---------YangGe (TOM) ,YangGe.freedom@icloud.com
#    ORGANIZATION:
#        CREATED: 2023-8-24 09:11:20    
#        REVISION: --------
#
#
#
#
#
#====================================================================================================================
# 定义函数factorial()--计算给定命令行参数的阶层
function factorial {

  # 定义本地变量i
  local i=$1
  # 定义本地变量f
  local f
  # 声明变量为整数
  declare -i i
  # 声明变量f为整数
  declare -i f

  # factorial 函数被调用,只到调用$f的值<-2
  # 开始递归
 [ $1 -le 2 ] && echo $i || { f=$(( i - 1)); f=$(factorial $f); f=$(( f * i )); echo ${f}; } 

}

# 显示函数用法
[ $# -eq 0 ] &&  { echo "Usage: $0 number"; exit 1; }

# 调用函数factorial
factorial $1
 


执行脚本:

[root@www functiondic]# ./functionnestedCalled.sh 
Usage: ./functionnestedCalled.sh number
[root@www functiondic]# ./functionnestedCalled.sh 2
2
[root@www functiondic]# ./functionnestedCalled.sh 4
24
[root@www functiondic]# ./functionnestedCalled.sh 24
-7835185981329244160
[root@www functiondic]# ./functionnestedCalled.sh 10
3628800
 

六:  Shell脚本函数后台执行


[root@www functiondic]# cat saemoncalledFunction.sh 
#==================================================================================================================
#
#
#                           FILE:  saemoncalledFunction.sh
#                           USAGE: ./saemoncalledFunction.sh
#    DESCRIPTION:  Shell 中函数放在后台执行
#        OPTIONS: -------
#        REQUIREMENTS: ---------

#        BUGS: ------
#        NOTES: -------- 
#        AUTHOR: ---------YangGe (TOM) ,YangGe.freedom@icloud.com
#    ORGANIZATION:
#        CREATED: 2023-8-24 09:11:20    
#        REVISION: --------
#
#
#
#
#
#====================================================================================================================
# 定义函数progress,显示进度条
progress(){
 echo -n "$0: Please wait.............."
  # 执行无限while循环
  while true
  do
    echo -n "."
    # 休眠5秒
    sleep 5
  done

}

# 定义函数dobackup
dobackup(){
 # 运行备份命令
 tar -zcvf /dev/st0 /home >/dev/null 2>&1

}

# 将函数放在后台运行
progress &

# 保存函数progress()运行的进程号
# 需要使用PID来结束此函数
MYSELF=$!

# 开始备份
# 转移控制到函数dobackup
dobackup

# 杀死进程
kill $MYSELF > /dev/null 2>&1
echo -n ".....done."
echo
 


脚本执行效果:


[root@www functiondic]# ./saemoncalledFunction.sh 
./saemoncalledFunction.sh: Please wait.....................done.
 

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

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

相关文章

【扩散模型 李宏毅B站教学以及基础代码运用】

李宏毅教学视频&#xff1a; Link1 B站DDPM公式推导以及代码实现&#xff1a; Link2 这个视频里面有论文里面的公式推导&#xff0c;并且1小时10分开始讲解实例代码。 文章目录 扩散模型概念&#xff1a;Diffusion Model工作原理&#xff1a;影像生成模型本质上的共同目标B站…

算法——组合程序算法解析

组合就是从m个元素的数组中求n个元素的所有组合&#xff0c;代码如下&#xff1a; #include <iostream> #include <vector> using namespace std; // 递归求解组合 void combinations(vector<int>& nums, vector<int>& combination, int star…

Linux 安装 JDK

要在Linux上安装JDK 1&#xff0c;按照以下步骤进行操作&#xff1a; 1. 下载JDK安装文件&#xff1a;首先&#xff0c;你需要找到适用于你操作系统的JDK安装文件&#xff08;tar.gz或tar.bz2格式&#xff09;。你可以从Oracle官方网站或其他可信的来源下载该文件。 2. 解压…

Ansible自动化运维

目录 前言 一、概述 常见的开源自动化运维工具比较 二、ansible环境搭建 三、ansible模块 &#xff08;一&#xff09;、hostname模块 &#xff08;二&#xff09;、file模块 &#xff08;三&#xff09;、copy模块 &#xff08;四&#xff09;、fetch模块 &#xff…

借助各大模型的优点生成原创视频(真人人声)Plus

【技术背景】 众所周知&#xff0c;组成视频的3大元素&#xff0c;即文本语音图片。接着小编逐一介绍生成原创视频的过程。 【文本生成】 天工AI搜索&#xff08;thttp://iangong.cn&#xff09; 直接手机短信验证就可以使用&#xff0c;该大模型已经接入互联网&#xff0c…

什么是IIFE(Immediately Invoked Function Expression)?它有什么作用?

聚沙成塔每天进步一点点 ⭐ 专栏简介⭐IIFE 的基本语法⭐IIFE 的主要作用⭐如何使用 IIFE 来创建私有变量和模块封装⭐ 写在最后 ⭐ 专栏简介 前端入门之旅&#xff1a;探索Web开发的奇妙世界 记得点击上方或者右侧链接订阅本专栏哦 几何带你启航前端之旅 欢迎来到前端入门之旅…

GOOGLE SRE 运维模式解读

一、SRE核心是什么 我总结下来是&#xff1a;通过软件工程的方式开发&#xff08;GOOGLE规定SRE团队必须将50%的精力花在真实的开发工作上&#xff09;一些自动化的工具系统来解放传统运维工程师大量重复和手工操作&#xff0c;从而让新生代的SRE工程师有更多的时间&#xff1…

五种定时任务方案(Timer+ScheduleExecutorService+spring task+多线程执行+quartz)

方案一&#xff1a;Timer (1)Timer.schedule(TimerTask task,Date time)安排在制定的时间执行指定的任务。 (2)Timer.schedule(TimerTask task,Date firstTime ,long period)安排指定的任务在指定的时间开始进行重复的固定延迟执行&#xff0e; (3)Timer.schedule(TimerTask…

YashanDB:潜心实干,数据库核心技术突破没有捷径可走

都说数据库是三大基础软件中的一块硬骨头&#xff0c;技术门槛高、研发周期长、工程要求高&#xff0c;市场长期被几大巨头所把持。 因此&#xff0c;实现突破一直是中国数据库产业的夙愿。自上个世纪80年代起&#xff0c;中国数据库产业走过艰辛坎坷的四十余载&#xff0c;终…

【数据结构】二叉搜索树——二叉搜索树的概念和介绍、二叉搜索树的简单实现、二叉搜索树的增删查改

文章目录 二叉搜索树1. 二叉搜索树的概念和介绍2. 二叉搜索树的简单实现2.1二叉搜索树的插入2.2二叉搜索树的查找2.3二叉搜索树的遍历2.4二叉搜索树的删除2.5完整代码和测试 二叉搜索树 1. 二叉搜索树的概念和介绍 二叉搜索树又称二叉排序树&#xff0c;它或者是一棵空树&…

【Spring 事务和事务传播机制】

目录 1 事务概述 1.1 为什么需要事务 1.2 事务的特性 1.3 Spring 中事务的实现 2 Spring 声明式事务 2.1 Transactional 2.2 Transactional 的作用范围 2.3 Transactional 的各种参数 2.3.1 ioslation 2.4 事务发生了异常&#xff0c;也不回滚的情况 异常被捕获时 3 事务的传…

通过 Blob 对二进制流文件下载实现文件保存下载

原理&#xff1a;前端将二进制文件做转换实现下载: 请求后端接口->接收后端返回的二进制流(通过二进制流&#xff08;Blob&#xff09;下载,把后端返回的二进制文件放在 Blob 里面)->再通过file-saver插件保存 页面上使用&#xff1a; <span click"downloadFil…

作为产品经理,有必要考PMP或者NPDP么?

产品经理的核心竞争力是什么? 三点&#xff1a;知识、能力和决策 懂得越多&#xff0c;能力越强&#xff0c;决策越正确&#xff0c;核心竞争力越强。一般来说&#xff0c;看的越多&#xff0c;做的越多&#xff0c;实践出经验才是王道&#xff0c;但是&#xff0c;总有看不…

智慧物流发展的重要推动力量:北斗卫星导航系统

随着经济的快速发展和电商的普及&#xff0c;物流行业的规模不断扩大&#xff0c;对物流运输的效率和安全性也提出了更高的要求。传统的物流运输方式存在着效率低下、信息不对称、安全隐患等问题&#xff0c;因此发展智慧物流已经成为物流行业的必然趋势。智慧物流可以通过先进…

立晶半导体Cubic Lattice Inc 专攻音频ADC,音频DAC,音频CODEC,音频CLASS D等CL7016

概述&#xff1a; CL7016是一款高保真USB Type-C兼容音频编解码芯片。可以录制和回放有24比特音乐和声音。内置回放通路信号动态压缩&#xff0c; 最大42db录音通路增益&#xff0c;PDM数字麦克风&#xff0c;和立体声无需电容耳机驱动放大器。 5V单电源供电。兼容USB 2.0全速工…

深度学习面试八股文(2023.9.06持续更新)

一、优化器 1、SGD是什么&#xff1f; 批梯度下降&#xff08;Batch gradient descent&#xff09;&#xff1a;遍历全部数据集算一次损失函数&#xff0c;计算量开销大&#xff0c;计算速度慢&#xff0c;不支持在线学习。随机梯度下降&#xff08;Stochastic gradient desc…

基于vue-cli创建后台管理系统前端页面——element-ui,axios,跨域配置,布局初步,导航栏

目录 引出安装npm install安装element-ui安装axios 进行配置main.js中引入添加jwt前端跨域配置 进行初始布局HomeView.vueApp.vue 新增页面和引入home页面导航栏总结 引出 1.vue-cli创建前端工程&#xff0c;安装element-ui&#xff0c;axios和配置&#xff1b; 2.前端跨域的配…

记录学习--字节码解析try catch

1.示例代码 Testpublic void someTest() {String s "111";try {s "222";int i 1/0;} catch (Exception e){e.printStackTrace();System.out.println(s);}System.out.println(s);}2.示例代码对应的字节码 0 ldc #2 <111>2 astore_13 ldc #3 <22…

“深入理解SpringMVC的注解驱动开发“

目录 引言1. SpringMVC的常用注解2. SpringMVC的参数传递3. SpringMVC的返回值4. SpringMVC页面跳转总结 引言 在现代的Web开发中&#xff0c;SpringMVC已经成为了一个非常流行和强大的框架。它提供了许多注解来简化开发过程&#xff0c;使得我们能够更加专注于业务逻辑的实现…

【python】TCP socket服务器 Demo

目录 一、单线程服务器 二、多线程服务器 三、多线程服务器&#xff08;发送和接收分离&#xff09; 一、单线程服务器 说明&#xff1a;只能连接一个客户端 import socket,binascii# 创建一个 TCP 套接字 server_socket socket.socket(socket.AF_INET, socket.SOCK_STRE…