shell脚本的函数介绍和使用案例

#前言:今天我们来聊聊shell脚本中的函数知识,看一下函数的优势,执行过程和相关的使用案例,我们也来看一下shell和python的函数书写方式有什么不同

#简介

1、函数也具有别名类似的功能
2、函数是把程序里多次调用相同的代码部分定义成一份,然后给这份代码定义个名字,如果出现重复的就调用就行了

#函数的优势

1、把相同的程序段定义成函数,可以减少整个程序的代码量
2、可以让程序代码结构更清晰
3、增加程序的可读、易读性、以及管理性
4、可以实现程序功能模块化,不同的程序使用函数模块化

#语法格式

函数名(){
    指令
    return n
}

规范写法
function 函数名(){
    指令
    return n
}
#提示:shell的返回值是exit输出返回值,函数里用return输出返回值        

#函数的执行

调用函数
#1、直接执行函数名即可(不带括号)
#注意
执行函数时,函数后的小括号不要带了
函数定义及函数整体必须在要执行的函数名的前面定义

#2、带参数的函数执行方法
    函数名  参数1 参数2

#提示:函数的传参和脚本的传参类似
#shell的位置参数($1 $2 $3 $4 $5 $# $* $? [email protected])都可以时函数的参数
#$0比较特殊,仍然是父脚本的名称
#在shell函数里面,return命令功能与shell里的exit类似,作用时跳出函数
#在shell函数里面使用exit会退出整个shell脚本,而不是退出shell函数
#return语句会返回一个退出值(返回值)给调用函数的程序

#我们来看一下python的函数书写方式

#提示:def是define的意思,定义

最基本的语法:
    def 函数名():
        函数体
   函数名() #调用函数

带有参数的语法
def 函数名(形参列表):
    函数体(代码块,return)

函数名(实参列表) :调用 

#看一下执行过程

# def wan():  #定义函数
#     print("今天一起去玩")
#     print("去哪里玩呢")
#     print("我不知道")
# wan()  #调用函数
‘‘‘讲解执行的过程
    1.定义函数wan()
    2.调用函数wan()
    3.准备开始执行函数
    4.打印,今天一起去玩
    5.打印,去哪里完
    6.打印,我不知道
    7.函数执行完毕,本次调用完毕,wan()函数调用完毕
‘‘‘

#使用

#例1:没有去调用函数

[[email protected] scripts]# pwd
/scripts
[[email protected] scripts]# cat hs01.sh
#!/bin/bash

guoke(){
    echo "I am guoke"
}
[[email protected] scripts]# sh hs01.sh
[[email protected] scripts]#  #如果没有去调用函数的话,那么就没有输出

#例2:调用函数

[[email protected] scripts]# cat hs01.sh
#!/bin/bash

guoke(){
    echo "I am guoke"
}
guoke  #调用函数
[[email protected] scripts]# sh hs01.sh
I am guoke

#例3:多次调用

[[email protected] scripts]# cat hs01.sh
#!/bin/bash

guoke(){
    echo "I am guoke"
}
guoke
guoke
guoke

[[email protected] scripts]# sh hs01.sh
I am guoke
I am guoke
I am guoke

#例4:将函数写到/etc/init.d/functions里面,然后通过其他脚本进行调用

#/etc/init.d/functions
boy(){
    echo "I am guoke-boy"
}

return 0
#提示:不要放在return 0后面,要不然就是退出了,没有调用

[[email protected] scripts]# cat hs01.sh   #通过脚本去调用boy函数
#!/bin/bash

. /etc/init.d/functions  #引入系统函数库
guoke(){
    echo "I am guoke"
}
guoke
boy #调用/etc/init.d/functions中的函数
[[email protected] scripts]# sh hs01.sh  #执行之后打印
I am guoke
I am guoke-boy

#例5:将函数写到/etc/init.d/functions里面,通过其他脚本进行调用然后传参

#/etc/init.d/functions
boy(){
    echo "I am $1"
}
#提示:$1:脚本的传入的第一个参数
[[email protected] scripts]# cat hs01.sh   #通过脚本去调用boy函数
#!/bin/bash

. /etc/init.d/functions  #引入系统函数库
guoke(){
    echo "I am guoke"
}
guoke
boy guoke-boy #调用/etc/init.d/functions中的函数,后面接着传参

[[email protected] scripts]# sh hs01.sh  #执行之后打印
I am guoke
I am guoke-boy

#例6:设置提示函数,如果传的参数的值不符合就打印帮助函数

[[email protected] scripts]# cat hs02.sh
#!/bin/bash
usage(){
    echo "Usage:
$0 key beginservernum endservernum

example:
$0 ff 1 2"
}

[[ $# != 3 ]] && usage && exit 1  #如果传入的参数不等于3的话,就调用后面的函数,并退出脚本
[[ -z $1 || -z $2 || -z $3 ]] && usage && exit 1 #如果传入的$1,$2,$3三个参数的值为空,那么就调用后面的函数,并退出脚本

[[email protected] scripts]# sh hs02.sh  22 33  #当传入的参数不等于3个的时候就执行usage函数,并退出脚本
Usage:
hs02.sh key beginservernum endservernum

example:
hs02.sh ff 1 2

#例7:将函数的传参转换成脚本文件命令行传参,判断任意指定的URL是否存在异常

[[email protected] scripts]# cat hs03.sh
#!/bin/bash

. /etc/init.d/functions

function usage(){
    echo $"usage:$0 url"
    exit 1
}

function check_url(){
    wget --spider -q -o /dev/null --tries=1 -T 5 $1
    if [ $? -eq 0 ];then
    action "$1 is success." /bin/true
    else
    action "$1 is failure." /bin/false
    fi
}

function main(){
    if [ $# -ne 1 ];then
    usage
    fi
    check_url $1
}
main $*

#参数解释

. /etc/init.d/functions  #引入系统函数库
function usage(){  #帮助函数

function check_url(){  #检测URL函数
     wget --spider -q -o /dev/null --tries=1 -T 5 $1  #--spider:判断网址是否有效,-q:不显示执行过程,-o:将软件输出信息保存到软件,-T:指定超时时间
     action "$1 is success." /bin/true  #action:调用系统函数库的用法

function main(){  #主函数
    if [ $# -ne 1 ];then  #判断:如果传参的参数不等1个,那么久打印帮助函数,提示用户
    check_url $1 #接收函数的传输
main $*  #$*:把命令行接收的所有参数作为函数参数传给函数内部

#测试

[[email protected] scripts]# sh hs03.sh   #如果没有加参数,就调用提示函数
usage:hs03.sh url
[[email protected] scripts]# sh hs03.sh  www.guokeboy.com  #输入错误地址
www.guokeboy.com is failure.                               [FAILED](失败)
[[email protected] scripts]# sh hs03.sh www.baidu.com  #输入正确地址
www.baidu.com is success.                                  [  OK  ]

#例8:给任意字符串加指定颜色

[[email protected] scripts]# cat hs04.sh
#!/bin/bash

RED_COLOR=‘\E[1;31m‘
GREEN_COLOR=‘\E[1;32m‘
YELLOW_COLOR=‘\E[1;33m‘
BLUE_COLOR=‘\E[1;34m‘
PINK=‘\E[1;35m‘
RES=‘\E[0m‘

usage(){
    if [ $# -ne 2 ];then
    echo "USAGE:$0 {red|green|yellow|blue|pink}" contents
    exit 1
    fi
}

color(){
    case "$1" in
        red)
        echo -e "${RED_COLOR} $2 ${RES}"
    ;;
    green)
        echo -e "${GREEN_COLOR} $2 ${RES}"
    ;;
    yellow)
        echo -e "${YELLOW_COLOR} $2 ${RES}"
    ;;
    blue)
        echo -e "${BLUE_COLOR} $2 ${RES}"
    ;;
    *)
        usage
    esac
}

main(){
    if [ $# -ne 2 ];then
    usage
    fi
    color $1 $2
}
main $*

#参数解释

#1.定义颜色变量
    数字对应的颜色:30(黑色)、31(红色)、32(绿色)、33(黄色)、34(蓝色、35(粉红)、36(青色)、37(白色)
#2.定义帮助函数
#3.定义颜色函数,使用case来获取输入的值
#4.主函数,判断输入的参数是否为2个,如果不是就调用帮助函数 

#测试

#如果执行脚本,不加参数的话就打印帮助函数

#例9:使用shell函数开发rsync服务启动脚本

#使用start、stop、restart函数将代码 模块化,使用系统函数action优化显示

[[email protected] init.d]# cat rsyncd
#!/bin/bash
#chkconfig: 2345 20 80
#description: Rsyncd start scripts by guoke.

. /etc/init.d/functions

function usage(){
    echo $"usage:$0 {start|stop|restart}"
    exit 1
}

function start(){
    rsync --daemon
    sleep 1
    if [ `netstat -unplt | grep rsync | wc -l` -ge 1 ];then
      action "rsyncd is started." /bin/true
    else
      action "rsyncd is started." /bin/false
    fi
}

function stop(){
    killall rsync &>/dev/null
    sleep 2
    if [ `netstat -unptl | grep rsync |wc -l` -eq 0 ];then
      action "rsyncd is stopped." /bin/true
    else
      action "rsyncd is stopped." /bin/false
    fi
}

function restart(){
    stop
    sleep 2
    start
}

function main(){
    if [ $# -ne 1 ];then
    usage
    fi
    case "$1" in
    start)
        start
    ;;
    stop)
        stop
    ;;
    restart)
        stop
        sleep 1
        start
    ;;
    *)
        usage

    esac
}
main $*

#参数解释:引入系统函数库,定义帮助函数,然后定义start函数,stop函数,restart函数,定义主函数,主函数里面首先使用if判断传入的参数是不是为一个,如果不是就调用帮助函数,然后使用case语句获取传入的参数,再调用相关的函数,$*:把命令行接收的所有参数作为函数参数传给函数内部

#测试

[[email protected] init.d]# sh rsyncd stop
rsyncd is stopped.                                         [  OK  ]
[[email protected] init.d]# sh rsyncd start
rsyncd is started.                                         [  OK  ]
[[email protected] init.d]# sh rsyncd restart
rsyncd is stopped.                                         [  OK  ]
rsyncd is started.                                         [  OK  ]

#总结:将脚本中功能进行模块化之后,就会使脚本比较易读和清晰,提升管理效率。好了,这次就分享到这了,写的不好地方还望指出,多多交流提高,下次再会。。。



原文地址:https://www.cnblogs.com/guoke-boy/p/12545143.html

时间: 2024-09-30 05:55:57

shell脚本的函数介绍和使用案例的相关文章

Linux中的shell脚本编程——函数

概述: 本章节将总结while,for循环语句的特殊用法,在不同的场景当中,更能发挥其功能和价值.除此之外,还会介绍一种特殊的循环语句select语句,实现菜单的作用.最重要的是讲解shell脚本编程中函数的用法.这些内容都要熟练掌握. 一.循环语句的特殊用法: 1.while循环的特殊用法(遍历文件的每一行): □语法:while read line; do 循环体 done < /PATH/FROM/SOMEFILE □意义:依次读取/PATH/FROM/SOMEFILE文件中的每一行,且将

shell脚本编程学习笔记-shell脚本编程基础介绍

一. Shell脚本介绍及第一个规范shell脚本说明 1.1 shell脚本简介 1.1.1 shell是什么? shell是一个命令解释器它在操作系统的最外层负责直接与用户对话把用户的输入解释给操作系统并处理各种各样的操作系统的输入结果输出到屏幕返回给用户,这种对话可以是交互是的(从键盘输入命令可以立即得到shell的回应)或非交互(脚本的方式). 下图中×××的部分就是shell处于操作系统的位置. 1.1.2什么是shell脚本 当linux命令或语句不在命令行下执行(严格的说命令行执行

Shell脚本(函数,shell中的数组)

函数 函数就是把一段代码整理到一个小单元中,并给这个小单元起一个名字,当用到这段代码时直接调用这个小单元的名字即可. 格式:function f_name(){ command } 函数必须放在最前面,函数名可以自己定义. 案例一: [[email protected] shell]# vim fun.sh #!/bin/bash function inp() { echo $1 $2 $3 $10 ${10} ${11} $0 $# [$*] } inp 1 2 3 4 5 6 7 8 9 3

shell脚本之函数的定义及使用

函数Function的使用 定义函数 1) 函数名称() { ... ... } 2) function 函数名称 { ... ... } 调用函数 函数名称 也可以通过位置变量的方式给函数传递参数 例子: 编写脚本,实现目录管理功能,要求使用函数 #!/bin/bash # createDir() { read -p "Enter directory: " dir if [ -d $dir ]; then echo "目录$dir存在" else mkdir -p

shell脚本实现企业级简易跳板机案例

跳板机用途只做ssh中转,为严格控制跳板机数据进出.命令管理等,特对跳板机入口操作进行限制管理.该脚本包含两种界面风格,详见下面说明 . 功能说明: * 屏蔽用户对跳板机系统进行任何未授权操作操作 * 查询用户已授权主机,具备权限用户方可连接后台服务器 * 授权命令集合(密钥生成.上传.copy,密码更改等),可根据实际需求自定义 * 此脚本依赖于LDAP用户管理,如无LDAP服务,可自行定义用户和主机组对应关系即可 界面一:用户授权登陆主机数量不超过20台 通过选择左侧列表序号登陆右侧主机 选

shell脚本 4 函数与正则

shell函数 shell中允许将一组命令集合或语句形成一段可用代码,这些代码块称为shell函数.给这段代码起个名字称为函数名,后续可以直接调用该段代码. 格式 func() {   #指定函数名 command    #函数体 } 实例1: #!/bin/bash func() { echo "This is a function." } func # bash test.sh This is a function. Shell 函数很简单,函数名后跟双括号,再跟双大括号.通过函数

shell脚本结合函数实现简单计算器功能

#!/bin/bashfunction tool_menu(){    echo "****************************************************"    echo "*                                                  *"    echo "*              calculation  tools                  *"   

shell脚本之函数的参数

#! /bin/bash echo use function hello() { echo how many parameters in the function:$#; echo the name of this function is $0; echo the first parameters is :$1; echo the second parameters is :$2; } hello "hello" "world" [[email protected]

什么是Shell?Shell脚本基础知识详细介绍

这篇文章主要介绍了什么是Shell?Shell脚本基础知识介绍,本文是一篇Shell脚本入门文章,在本文你可学到什么是Shell.有多少种Shell.一个Shell脚本代码实例,需要的朋友可以参考下 Shell本身是一个用C语言编写的程序,它是用户使用Linux的桥梁.Shell既是一种命令语言,又是一种程序设计语言.作为命令语言,它交互式地解释和执行用户输入的命令:作为程序设计语言,它定义了各种变量和参数,并提供了许多在高级语言中才具有的控制结构,包括循环和分支. 它虽然不是Linux系统核心