shell脚本中的函数,shell中的数组,shell项目-告警系统

shell脚本中的函数

  • 函数就是把一段代码整理到了一个小单元中,并给这个小单元起一个名字,当用到这段代码时直接调用这个小单元的名字即可。
  • 格式:
    function f_name() {
    command

}
函数必须要放在最前面,function可以省略直接写函数名

  • 示列1,打印shell的参数

    [[email protected] shell]# cat fun1.sh
    #!/bin/bash
    function inp(){
    echo "the first par is $1"
    echo "the sedcond par is $2"
    echo "the third par is $3"
    echo "the scritp name is $0"
    echo "the number of par is $#"
    }
    inp b a 2 3 sjkdj
    [[email protected] shell]# sh fun1.sh
    the first par is b
    the sedcond par is a
    the third par is 2
    the scritp name is fun1.sh
    the number of par is 5
    第一个参数是b,第二个是a,第三个是2,脚本名是fun1.sh,参数个数是5.
  • 也可以定义函数的参数
    [[email protected] shell]# cat fun1.sh
    #!/bin/bash
    function inp(){
    echo "the first par is $1"
    echo "the sedcond par is $2"
    echo "the third par is $3"
    echo "the scritp name is $0"
    echo "the number of par is $#"
    }
    inp $1 $2 $3
    [[email protected] shell]# sh fun1.sh 1 2 3
    the first par is 1
    the sedcond par is 2
    the third par is 3
    the scritp name is fun1.sh
    the number of par is 3
  • 示列2,第一个参数和第二个参数相加并打印
    [[email protected] shell]# cat fun2.sh
    #!/bin/bash
    sum(){
    s=$[$1+$2]
    echo $s
    }
    sum 1 10
    [[email protected] shell]# sh fun2.sh
    11
  • 示列3,输入网卡名,得到ip
函数的核心命令推演
[[email protected] shell]# ifconfig |grep -A1 "ens33"
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.21.128  netmask 255.255.255.0  broadcast 192.168.21.255
ens33:0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.21.133  netmask 255.255.255.0  broadcast 192.168.21.255
[[email protected] shell]# ifconfig |grep -A1 "ens33: "
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.21.128  netmask 255.255.255.0  broadcast 192.168.21.255
[[email protected] shell]# ifconfig |grep -A1 "ens33: "|awk ‘/inet/‘
        inet 192.168.21.128  netmask 255.255.255.0  broadcast 192.168.21.255
[[email protected] shell]# ifconfig |grep -A1 "ens33: "|awk ‘/inet/‘|awk -F ‘ ‘ ‘{print$2}‘
192.168.21.128

[[email protected] shell]# cat fun3.sh
#!/bin/bash
ip()
{
 ifconfig |grep -A1 "$1: "|awk ‘/inet/‘|awk -F ‘ ‘ ‘{print$2}‘
}
while :
do
  read -p "Please input the eth name:" eth
  n=`ifconfig|grep "$eth"`
  if [ -z "$eth" ]
    then
      echo "你必须输入一个网卡名"
    elif [ -z "$n" ]
      then
        echo "请你输入正确的网卡名"
        continue
    else
      break
   fi
done
ip_=`ip $eth`
if [ -z "$ip_" ]
  then
    echo "$eth:这个网卡没有配置ip"
  else
    echo "$eth:$ip_"
fi
[[email protected] shell]# sh fun3.sh
Please input the eth name:
你必须输入一个网卡名
Please input the eth name:dada
请你输入正确的网卡名
Please input the eth name:ens33
ens33:192.168.21.128
[[email protected] shell]# sh fun3.sh
Please input the eth name:ens37
ens37:这个网卡没有配置ip

shell中的数组

  • 定义数组,a=(1 2 3 4);echo ${a[@]}.这里的数字也能写为字符串

    [[email protected] shell]# a=(as b cd)
    [[email protected] shell]# echo ${a[@]}
    as b cd
    [[email protected] shell]# echo ${a[*]}
    as b cd
  • echo ${a[2]} 读取第三个元素,数组从0开始
    [[email protected] shell]# echo ${a[2]}
    cd
    [[email protected] shell]# echo ${a[1]}
    b
    [[email protected] shell]# echo ${a[0]}
    as
  • echo ${#a[@]} 获取数组的元素个数
    [[email protected] shell]# echo ${#a[*]}
    3
  • 数组赋值与更改,如果下标不存在则会自动添加一个元素
    [[email protected] shell]# a[5]=4
    [[email protected] shell]# echo ${#a[*]}
    4
    [[email protected] shell]# echo ${a[*]}
    as b cd 4
    [[email protected] shell]# a[1]=2
    [[email protected] shell]# echo ${a[*]}
    as 2 cd 4
  • 数组的删除
    [[email protected] shell]# unset a[0]
    [[email protected] shell]# echo ${a[*]}
    2 cd 4
    [[email protected] shell]# unset a
    [[email protected] shell]# echo ${a[*]}
  • 数组分片
    • 从第一个开始截取3个

      [[email protected] shell]# a=(seq 1 10)
      [[email protected] shell]# echo ${a[*]}
      1 2 3 4 5 6 7 8 9 10
      1 2 3

    • 从倒数第三个开始截取2个
      8 9
  • 数组替换
    [[email protected] shell]# echo ${a[@]/7/5}
    1 2 3 4 5 6 5 8 9 10
    [[email protected] shell]# a=(${a[@]/8/3})
    [[email protected] shell]# echo ${a[@]}
    1 2 3 4 5 6 7 3 9 10

    shell项目-告警系统需求分析

  • 需求:使用shell定制各种个性化告警工具,但需要统一化管理、规范化管理。
  • 思路:指定一个脚本包,包含主程序、子程序、配置文件、邮件引擎、输出日志等。
  • 主程序:作为整个脚本的入口,是整个系统的命脉。
  • 配置文件:是一个控制中心,用它来开关各个子程序,指定各个相关联的日志文件。
  • 子程序:这个才是真正的监控脚本,用来监控各个指标。
  • 邮件引擎:是由一个python程序来实现,它可以定义发邮件的服务器、发邮件人以及发件人密码
  • 输出日志:整个监控系统要有日志输出。
  • 要求:我们的机器角色多种多样,但是所有机器上都要部署同样的监控系统,也就说所有机器不管什么角色,整个程序框架都是一致的,不同的地方在于根据不同的角色,定制不同的配置文件。
  • 程序架构:
                                       (主目录 mon)
                                                   |
     --------------------------------------------------------------------------------------
     |                   |                         |                              |                       |
    bin             conf                  shares                      mail                  log
    [main.sh]  [mon.conf]  [load.sh 502.sh] [mail.py mail.sh]  [mon.log err.log ]
    bin下是主程序
    conf下是配置文件
    shares下是各个监控脚本
    mail下是邮件引擎
    log下是日志。

原文地址:http://blog.51cto.com/akui2521/2145035

时间: 2024-10-14 01:14:05

shell脚本中的函数,shell中的数组,shell项目-告警系统的相关文章

linux shell 脚本获取和替换文件中特定内容

1.从一串字符串中获取特定的信息 要求1:获取本机IP:menu.lst为系统镜象的IP配置文件,需要从中获取到本机IP信息(从文件获取信息) 1 timeout 1 2 default 0 3 4 title live 5 find --set-root /casper/vmlinuz 6 kernel /casper/vmlinuz boot=casper ignore_uuid showmounts ip=eth0,10.0.66.66,255.255.240.0,10.0.64.3 7

《Linux Shell脚本攻略》 笔记 第一章:Shell起步基础

<Linux Shell脚本攻略> 笔记 第一章:Shell起步基础 1.变量:在bash中,每一个变量的值都是字符串.无论你给变量赋值时,有没有使用引号,值都会以字符串的形式存储. 2.var=value; //赋值操作 var = value: //相等操作 3.获取字符串的长度 [[email protected] ~]$ var=yang [[email protected] ~]$ length=${#var} [[email protected] ~]$ echo $length

shell,shell脚本结构和执行方法,data命令,shell脚本中的变量

shell是什么shell是一种脚本语言 aming_linux blog.lishiming.net可以使用逻辑判断.循环等语法可以自定义函数shell是系统命令的集合shell脚本可以实现自动化运维,能大大增加我们的运维效率 shell脚本结构和执行方法开头需要加#!/bin/bash以#开头的行作为解释说明脚本的名字以.sh结尾,用于区分这是一个shell脚本执行方法有两种chmod +x 1.sh; ./1.shbash 1.sh查看脚本执行过程 bash -x 1.sh查看脚本是否语法

将 shell 脚本打包到 rpm 包中

下以操作最好在虚拟机上操作:如 Docker 最方便了 1. 安装 rpmbuild yum -y install rpmbuild  rpmdevtools -y 2. 生成打包路径 使用 rpmdev-setuptree ,会自动在用户家目录生成一个 rpmbuild 的文件夹,作为工作路径 cd rpmbuild/SPECS 路径,创建 filename.spec 文件(打包 shell 脚本示例),详细含义查阅相关文档 Name: name Version: 0.1.0 Release:

[linux] shell脚本编程-统计日志文件中的设备号发通知邮件

1.日志文件列表 比如:/data1/logs/2019/08/15/ 10.1.1.1.log.gz 10.1.1.2.log.gz 2.统计日志中的某关键字shell脚本 zcat *.gz|grep 关键字 |grep -oP "deviceid=[^=]+"|uniq|sort -u > /tmp/20190815.log date 格式化出年月等信息,拼接成路径 wc -l /tmp/20190815.log , 获取到行数 php /xxxxx/sendmail.ph

shell脚本:查看KVM虚拟机中的网卡信息(不需要进入启动或进入虚拟机)

# Author:丁丁历险(Jacob) # 该脚本使用guestmount工具,可以将虚拟机的磁盘系统挂载到真实机文件系统中 # Centos7.2中安装libguestfs-tools-c可以获得guestmount工具 # 虚拟机可以启动或者不启动都不影响该脚本的使用 # 将虚拟机磁盘文件挂载到文件系统后,就可以直接读取磁盘文件中的网卡配置文件中的数据该脚本使用guestmount工具,可以将虚拟机的磁盘系统挂载到真实机文件系统中 #!/bin/bash #Author:丁丁历险(Jaco

shell脚本编程之函数

函数:function 过程式编程:代码重用 模块化编程 结构化编程 把一段独立功能的代码当作一个整体,并为之一个名字:命名的代码段,此即为函数: 注意:定义函数的代码段不会自动执行,在调用时执行:所谓调用函数,在代码中给定函数名即可: 函数名出现的任何位置,在代码执行时,都会被自动替换为函数代码: 语法一: function  f_name  { ...函数体... } 语法二: f_name()  { ...函数体... } 函数的生命周期:每次被调用时创建,返回时终止: 其状态返回结果为函

shell 脚本学习笔记--函数

一.定义格式 [function] 函数名() { 命令表 } 二.调用方法 先定义,后使用,直接输入函数名,不需要圆括号() 三.函数参数传递方法 可以利用位置参数或者变量进行传递 #! /bin/bash# myfirst.sh testFunction() { echo "$1,$2" #位置参数传递参数 echo "$val1,$val2" #变量传递参数 } val1="test1" val2="test2" tes

shell脚本如何自定义函数

在写程序时,经常会用到函数,一般开发工具拥有丰富的函数库.但有时还需要根据自己的需要自定义函数满足我们的需求. 在Linux中,写shell脚本也一样,有时会用到自定义函数. 函数,最简单的定义为:将一组命令集或语句形成一个可用块,这些块称为函数. 1.定义函数的格式: [sql] view plain copy function-name ( ){ command1 ........ } 或 [plain] view plain copy #函数名前面也可以加上function关键字 func

Linux python3安装/shell脚本/if/循环/函数

python3安装 安装过程 安装包: wget https://www.python.org/ftp/python/3.7.0/Python-3.7.0.tgztar -xvf Python-3.7.0.tgz #解压 基础包 1.基础yum包 yum install gcc yum install zlib yum install zlib-devel yum install libffi-devel -y yum install openssl openssl-devel -y 检测平台: