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

这篇具有很好参考价值的文章主要介绍了运维Shell脚本小试牛刀(七):在函数文脚本件中调用另外一个脚本文件中函数|函数递归调用|函数后台执行。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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


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

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

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

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

Cenos7安装小火车程序动画

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

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

运维Shell脚本小试牛刀(八): case模式忽略命令行参数大小写

运维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.
 文章来源地址https://www.toymoban.com/news/detail-701851.html

到了这里,关于运维Shell脚本小试牛刀(七):在函数文脚本件中调用另外一个脚本文件中函数|函数递归调用|函数后台执行的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Mapreduce小试牛刀(1)

    1.与hdfs一样,mapreduce基于hadoop框架,所以我们首先要启动hadoop服务器 --------------------------------------------------------------------------------------------------------------------------------- 2.修改hadoop-env.sh位置JAVA_HOME配置,在JAVA_HOME前面加上export,重启主虚拟机,最好也把另外两个节点同位置的

    2024年02月04日
    浏览(30)
  • 网页学习-小试牛刀

    分为三大部分: HTML 、 CSS 和 JavaScript 。 HTML(Hyper Text Markup Language,即超文本标记语言),网页骨架。 CSS(Cascading Style Sheets,层叠样式表),使页面变得美观、优雅,网页皮肤。 JavaScript(简称JS,是一种脚本语言),实现实时、动态、交互的页面功能,网页肌肉。 学习目的

    2023年04月22日
    浏览(50)
  • verilator——牛刀小试

    安装verilator可见:https://blog.csdn.net/qq_40676869/article/details/132648522?spm=1001.2014.3001.5501 编写一个异或的电路模块如下: top.v 编写C++测试文件 tb_top.cpp 编译并运行 –cc 将.v文件翻译成c++ –exe 创建可执行文件 –build verilator自动进行make –trace 记录波形 波形如下: github链接:https:/

    2024年02月10日
    浏览(29)
  • 快速上手kettle(二)小试牛刀

    目录 一 、前言 二 、两个小目标 三、 kettle核心概念介绍 3.1 转换 3.1.1 步骤(Step) 3.1.2 跳(Hop) 3.1.3 元素据 3.1.4 数据类型 3.1.5 并发执行 3.2 作业 四、实践操作 4.1 案例1 将csv文件转换成excel文件 4.1.1 在kettle中新建一个转换 4.1.2选择输入控件并设置 4.1.3 选择输出控件并设置 4.

    2024年02月06日
    浏览(29)
  • 【LED子系统】八、小试牛刀

    个人主页:董哥聊技术 我是董哥,高级嵌入式软件开发工程师,从事嵌入式Linux驱动开发和系统开发,曾就职于世界500强公司! 创作理念:专注分享高质量嵌入式文章,让大家读有所得!

    2024年02月06日
    浏览(30)
  • 手动开发-实现SpringMVC底层机制--小试牛刀

    在这里说的底层机制的实现主要是指:前端控制器、Controller、Service注入容器、对象自动装配、控制器方法获取参数、视图解析、返回json数据。 前端控制器就是核心控制器。在这里我们可以设计一个Servlet来充当核心控制器: LingDispatcherServlet.java .这个控制器的作用主要是接收

    2024年02月08日
    浏览(36)
  • 小试牛刀 -- Kali Linux安装在手机

         Kali Linux是基于Debian的Linux的发行版,里面有许多关于网络渗透的程序,是目前在网络安全领域经常使用的工具,因此为了便于学习,在此进行Kali Linux的安装,主要安装在华为P50上,操作系统是鸿蒙4.0。    2.1 Termux的安装及配置        (1)Termux的安装        在安装Te

    2024年01月23日
    浏览(38)
  • 爬虫小试牛刀(爬取学校通知公告)

    完成抓取并解析DGUT通知公告12页数据,并提交excel文件格式数据,数据需要包含日期标题,若能够实现将详情页主体内容与发布人信息数据也一并抓取更佳 提交内容:Excel数据文件 首先看到页面呈现规则的各个方框,这意味着它们之间的一定是一样的 此处该有图 我们点开后

    2024年02月09日
    浏览(31)
  • 牛刀小试---二分查找(C语言)

    二分查找,也叫折半查找,是一种在 有序数组 中查找特定元素的算法。它通过比较中间元素和目标值的大小,将查找范围缩小为一半,直到找到目标元素或者查找范围为空。  1. 确定搜索范围:首先,需要确定要在哪个区间内进行查找。这可以通过比较目标值与中间元素的

    2024年01月17日
    浏览(28)
  • Python OpenCV 牛刀小试(练习)

            OpenCV在读取图像时,默认的颜色空间是BGR(蓝绿红),而在大多数其他的图像处理库和图像格式中,使用的颜色空间是RGB(红绿蓝)。因此,当你需要使用OpenCV处理图像,然后将处理结果传递给其他库(如matplotlib、PIL等)进行进一步处理或显示时,你需要将颜色空间

    2024年02月21日
    浏览(29)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包