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

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

相关文章

React笔记(八)Redux

一、安装和配置 React 官方并没有提供对应的状态机插件&#xff0c;因此&#xff0c;我们需要下载第三方的状态机插件 —— Redux。 1、下载Redux 在终端中定位到项目根目录&#xff0c;然后执行以下命令下载 Redux npm i redux 2、创建配置文件 在 React 中&#xff0c;…

mysql创建用户

创建用户 创建 -- 创建用户 itcast , localhost只能够在当前主机localhost访问, 密码123456; create user test01localhost identified by 123456;使用命令show databases;命令&#xff0c;只显示一个数据库&#xff0c;因为没有权限 -- 创建用户 test02, 可以在任意主机访问…

Java基础(四)

151. LinkedList特征分析 增删快 可以打断连接&#xff0c;重新赋值引用&#xff0c;不 涉及数据移动操作,效率高 查询慢 双向链表结构数据存储非连 续&#xff0c;需要通过元素一一 跳转 152 ArrayList和LinkedList对比分析 ArrayList特征 查询快。增删慢 适用于数据产出之…

cookies 设置过期时间

1.如何在浏览器中查看cookie过期时间 F12-Application-Cookies可以查看到网页所有设置cookie值&#xff0c; 如果设置了过期时间的cookie是可以看到过期时间的持久cookie&#xff08;persistent cookie&#xff09;&#xff0c; 没有设置过期时间的是会话cookie&#xff08;s…

基于云计算的区域LIS系统系统源码

在医疗机构内部&#xff0c;院内实验室主要负责本院临床科室的检验&#xff0c;院内LIS系统必须满足实验室日常的标本处理入库、仪器联机、检验结果处理、报告打印、报告发布、检验信息统计、检验信息报告发布、标本流程、外部医疗机构检验报告调阅等工作。 在医疗机构间&#…

ARM编程模型-常用指令集

一、ARM指令集 ARM是RISC架构&#xff0c;所有的指令长度都是32位&#xff0c;并且大多数指令都在一个单周期内执行。主要特点&#xff1a;指令是条件执行的&#xff0c;内存访问使用Load/store架构。 二、Thumb 指令集 Thumb是一个16位的指令集&#xff0c;是ARM指令集的功能…

WEB APIs day6

一、正则表达式 RegExp是正则表达式的意思 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"viewport" co…

利用less实现多主题切换(配合天气现象)

1. 先看效果&#xff1a; 2. 话不多说直接撸吧&#xff1a; 原理&#xff1a;先给body元素添加style&#xff0c;再根据天气现象动态更改style 开撸&#xff1a; 创建src/assets/style/variables.less 使用 XXX:var(–XXX,‘style’) 声明系列变量&#xff0c;之后添加其他变…

微服务01-基本介绍+注册中心EureKa

基本介绍 服务集群&#xff1a;一个请求由多个服务完成&#xff0c;服务接口暴露&#xff0c;以便于相互调用&#xff1b; 注册中心&#xff1a;每个服务的状态&#xff0c;需要进行维护&#xff0c;我们可以在注册中心进行监控维护服务&#xff1b; 配置中心&#xff1a;这些…

自动化测试开发 —— 如何封装自动化测试框架?

封装自动化测试框架&#xff0c;测试人员不用关注框架的底层实现&#xff0c;根据指定的规则进行测试用例的创建、执行即可&#xff0c;这样就降低了自动化测试门槛&#xff0c;能解放出更多的人力去做更深入的测试工作。本篇文章就来介绍下&#xff0c;如何封装自动化测试框架…

Wireshark抓包常用指令

1.常用过滤规则 指定源地址&#xff1a; ip.src 10.0.1.123ip.src 10.0.1.123 && udphttp数据链路层&#xff1a;筛选mac地址为04:f9:38:ad:13:26的数据包----eth.src 04:f9:38:ad:13:26筛选源mac地址为04:f9:38:ad:13:26的数据包----eth.src 04:f9:38:ad:13:26网…