前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >07·Shell编程-函数

07·Shell编程-函数

作者头像
DriverZeng
发布2022-09-26 10:37:37
2860
发布2022-09-26 10:37:37
举报
文章被收录于专栏:Linux云计算及前后端开发

-曾老湿, 江湖人称曾老大。


-多年互联网运维工作经验,曾负责过大规模集群架构自动化运维管理工作。 -擅长Web集群架构与自动化运维,曾负责国内某大型金融公司运维工作。 -devops项目经理兼DBA。 -开发过一套自动化运维平台(功能如下): 1)整合了各个公有云API,自主创建云主机。 2)ELK自动化收集日志功能。 3)Saltstack自动化运维统一配置管理工具。 4)Git、Jenkins自动化代码上线及自动化测试平台。 5)堡垒机,连接Linux、Windows平台及日志审计。 6)SQL执行及审批流程。 7)慢查询日志分析web界面。


函数介绍

什么是函数

函数就是具备某一功能的工具

为什么要使用函数

如果不使用函数,那么你的代码: 1.程序的组织结构不清晰,可读性差 2.代码冗余 3.可扩展性(功能需要修改的时候...对不起GG)

如何使用函数

函数的使用必须遵循的原则:先定义,后调用 修理工事先准备好工具的过程,即,定义函数 修理工遇到应用场景哪来工具就用即函数的调用

函数的语法

函数定义语法

代码语言:javascript
复制
function foo() {
  cmd1
  cmd2
  cmd3
}

function foo {
  cmd1
  cmd2
  cmd3
}

foo() {
  cmd1
  cmd2
  cmd3
}

#foo指函数名:就相当于一个变量名,指向函数的内存地址

## 函数优化,企业级,入职必做
:(){ : | : & };:

函数的调用语法

代码语言:javascript
复制
直接使用函数名即可

函数传参语法

代码语言:javascript
复制
function foo() {
  args=$1
  cmd1
  cmd2
  cmd3
}

举例

函数分为两个阶段: 1.调用阶段:运行函数体代码 2.定义阶段:只检测语法,不执行代码

代码语言:javascript
复制
#!/bin/bash
#Author: _DriverZeng_
#Name: _Print Message_

max (){
  x=$1
  y=$2
  if [ $x -gt $y ];then
     echo $x
  else
     echo $y
  fi
}

max

[root@zabbix01 ~]# sh foo.sh 1 2

# 传参无效,所以这里面我们需要知道,bash的参数和函数的参数不是一个

函数参数 VS 脚本参数

特殊变量

脚本

函数

$N

脚本的第N个参数

函数的第N个参数

$0

脚本名称

脚本名称

$*/$@

脚本的所有参数

函数的所有参数

$#

脚本传递的参数个数

函数传递的参数个数


函数的返回值

函数的返回值,需要注意: 在Python中 1.返回值没有类型限制 2.返回值没有个数限制 1)如果返回1个值:调用函拿到的结果就是一个值 2)如果返回多个值:调用函数拿到的结果就是一个元组 3)如果返回0个值:调用函数拿到的结果就是None

在Shell中 1.函数返回值,必须是numeric,数字

代码语言:javascript
复制
## 字符串类型报错
foo.sh: line 15: return: zls: numeric argument required

2.返回值有个数限制,只能写一个返回值

代码语言:javascript
复制
## 多个返回值报错
foo.sh: line 15: return: too many arguments

返回值的作用很重要,方便我们后续的判断,包括变量的传递,在这里说可能体现不出来,后续我们写脚本的时候用到,就明白了。

函数练习

1.优化之前的脚本

2.写一个源码安装nginx的脚本

3.使用shell模拟ansible的模块,非常非常非常非常的烧脑,写到脑裂。

下面是一个不完整的脚本,写了一部分发现,mmp,不想写了,ansible太强大了,但是为了让大家更好的熟悉shell,我会上课带着大家写一点屡一点思路。

代码语言:javascript
复制
#!/bin/bash

if [ $2 != '-m' ];then
  echo "Usage: $0 hostname -m module -a action"
fi


# ansible 10.0.0.61 -m 'file' -a ""

module_judge (){
  module=$2
  if [ $module == 'file' ];then
     zls_file $4
  fi

}

zls_file (){
  for n in $*;do
    if [[ $n =~ 'src' ]];then
       src=`echo "${n}"|awk -F '=' '{print $2}'`
    elif [[ $n =~ 'dest' ]];then
       dest=`echo "${n}"|awk -F '=' '{print $2}'`
    elif [[ $n =~ 'mode' ]];then
       mode=`echo "${n}"|awk -F '=' '{print $2}'`
    elif [[ $n =~ 'owner' ]];then
       owner=`echo "${n}"|awk -F '=' '{print $2}'`
    fi
  done

  cp -a $src $dest
  chown ${owner:-root}.${owner:-root} ${dest}
  chmod ${mode:-600} ${dest:-600}
}

main() {


}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019-02-19,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 函数介绍
    • 什么是函数
      • 为什么要使用函数
        • 如何使用函数
          • 函数的语法
          • 函数参数 VS 脚本参数
          • 函数练习
          相关产品与服务
          运维安全中心(堡垒机)
          腾讯云运维安全中心(堡垒机)(Operation and Maintenance Security Center (Bastion Host))可为您的 IT 资产提供代理访问以及智能操作审计服务,为客户构建一套完善的事前预防、事中监控、事后审计安全管理体系,助力企业顺利通过等保测评。
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档