七十、shell中的函数、shell中的数组、告警系统需求分析

一、shell中的函数

函数就是把一段代码整理到了一个小单元中,并给这个小单元起一个名字,当用到这段代码时直接调用这个小单元的名字即可。函数就是一个子shell,一个代码段。

shell中的函数必须要定义在脚本的最上面。

格式: function f_name() {

command

}函数必须要放在最前面

f_name:函数名,最好不要和shell中的一些关键词冲突,比如for。

command:具体命令

function这个单词可以省略掉的。

示例1

#!//bin/bash

function inp(){

echo "The first par is $1"

echo "The serond par is $2"

echo "The third par is $3"

echo "the scritp name is $0"

echo "the number of par is $#"

}

inp a b 2 3 abc   //如何调用上面的函数,直接input,再加函数名,就等于是调用它了,好比shell中的一条命令

# sh fun1.sh

The first par is a

The second par is b

The third par is 2

the scritp name is fun1.sh

the number of par is 5

也可以将参数放到外面

# vim fun1.sh

#!//bin/bash

function inp(){

echo "The first par is $1"

echo "The second 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           //这里的$1代表的是fun1.sh的第一个参数

# sh fun1.sh 1     后面只跟一个1

The first par is 1

The second par is        这两项都为空

The third par is

the scritp name is fun1.sh

the number of par is 1        参数的个数为1

示例2

# vim fun2.sh

#!/bin/bash

sum() {

s=$[$1+$2]

echo $s

}

sum 1 2

# sh -x fun2.sh

+ sum 1 2            //就是$1+$2,$1=1,$2=2。

+ s=3

+ echo 3

3

示例3

#!/bin/bash

ip(){

ifconfig |grep -A1 "$1: " |tail -1 |awk '{print $2}'

}

read -p "Please input the eth name: " eth

myip=`ip $eth`

echo "$eth address is $myip"

解析:

ifconfig |grep -A1 "$1: " |tail -1 |awk '{print $2}'|awk -F':' '{print $2}'

这里脚本里要写$1:,这个冒号,很关键,因为ifconfig出来网卡名字后都有个冒号。

#  ifconfig |grep -A1 "ens33: "       //命令行示范这三条命令:

ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500

inet 192.168.93.130  netmask 255.255.255.0  broadcast 192.168.93.255

#  ifconfig |grep -A1 "ens33: " |tail -1      //这里tail -1也可以换成grep 'inet'

inet 192.168.93.130  netmask 255.255.255.0  broadcast 192.168.93.255

#  ifconfig |grep -A1 "ens33: " |tail -1 |awk '{print $2}'

192.168.93.130

# sh -x fun3.sh       测试:

+ read -p 'Please input the eth name: ' eth

Please input the eth name: ens33

++ ip ens33

++ ifconfig

++ grep -A1 'ens33: '

++ tail -1

++ awk '{print $2}'

+ myip=192.168.93.130

+ echo 'ens33 address is 192.168.93.130'

ens33 address is 192.168.93.130

二、shell中的数组

一串字符串或者一串数字,形成了一个变量,把这个变量叫数组。可以针对数组做操作,也可以取数组其中的某个值。

数组1:

定义数组 a=(1 2 3 4 5)

打印的格式: echo ${a[@]},里面的@符号也可以改成*

echo ${#a[@]} 获取数组的元素个数

echo ${a[2]} 读取某个元素的值,从0开始:0,1,2,3,4,5;方括号里的数字表示它的下标(元素是第几个位置)

echo ${a[*]} 等同于 ${a[@]}  显示整个数组

数组赋值:

元素的赋值,更改、覆盖,进行替换

a[3]=100

echo ${a[@]}

a[5]=2

echo ${a[@]}    //如果下标不存在则会自动添加一个元素

数组的删除

unset a       删除整个数组

unset a[1]   删除数组里的元素

数组2:

数组分片

a=(`seq 1 10`)            数组赋值可以使用seq

echo ${a[@]:0:3}       从第0个元素开始,截取多少个

echo ${a[@]:1:4}       比如从第二个元素开始,截取4个

echo ${a[@]:0-3:2}    从倒数第3个元素(0-3)开始,截取2个

数组替换:

echo ${a[@]/3/99}       //echo替换,将3替换成99

a=(${a[@]/3/99})        //直接赋值,要用小括号括起来,很关键

三、告警系统需求分析

shell项目-告警系统

需求:使用shell定制各种个性化告警工具,但需要统一化管理、规范化管理。

思路:指定一个脚本包,包含主程序、子程序、配置文件、邮件引擎、输出日志等。

主程序:作为整个脚本的入口,是整个系统的命脉。执行告警系统时直接执行主程序,要写一个调用这些函数的脚本。

配置文件:是一个控制中心,用它来开关各个子程序,指定各个相关联的日志文件。

子程序:这个才是真正的监控脚本,用来监控各个指标。不需要直接执行,会被主程序调用。while,for,监控系统负载的就放在子程序里。

邮件引擎:是由一个python程序来实现,它可以定义发邮件的服务器、发邮件人以及发件人密码,调用第三方的邮件,比如163。

输出日志:整个监控系统要有日志输出。

要求:我们的机器角色多种多样,但是所有机器上都要部署同样的监控系统,也就说所有机器不管什么角色,整个程序框架都是一致的,不同的地方在于根据不同的角色,定制不同的配置文件。

程序架构:

bin下是主程序

conf下是配置文件

shares下是各个监控脚本

mail下是邮件引擎

log下是日志。

原文地址:http://blog.51cto.com/13576245/2128627

时间: 2024-11-10 00:12:55

七十、shell中的函数、shell中的数组、告警系统需求分析的相关文章

shell中的函数 shell中的数组 告警系统需求分析

一.shell中的函数[[email protected] aming]# cd /root/shell/aming[[email protected] aming]# vim fun1.sh //需要注意函数名不能跟shell中的一些关键字冲突#!/bin/bashfunction inp(){echo $1 $2 $3 $0 $#} inp 1 a 2[[email protected] aming]# sh fun1.sh1 a 2 fun1.sh 3 //$0是脚本名称.3是参数个数 继

Swift 中的函数(中)

学习来自<极客学院:Swift中的函数> 工具:Xcode6.4 直接上基础的示例代码,多敲多体会就会有收获:百看不如一敲,一敲就会 1 import Foundation 2 3 //函数 4 5 //1.多个返回值 6 func area(width: Double,height: Double) -> (Double,Double) 7 { 8 var b = width 9 var a = width * height 10 return (a,b) 11 } 12 printl

shell变量、函数、控制流和数组以及字符串的截取

一.变量 1.shell变量名 (1)可以由字母.数字.下划线等字符组成.但是第一个字符必须是字母或者下划线. (2)若果变量中包含下划线(_)则要特别注意,$project_svn_$date.tar.gz 和 {$project_svn}_$date.tar.gz.第一个shell理解为$project是一个变量. 2.变量的赋值: variable=value note:赋值运算符前后不能有空格,否则会报错. 3.变量分类: 内部变量是为了shell编程的而设定的变量. 本地变量是在代码块

关于numpy中的函数return中加入字符串类型数据后,小数点精度变化

weekdays.pyimport numpy as npfrom datetime import datetimedef datestr2num(s): return datetime.strptime(s.decode('ascii'), "%d-%m-%Y").date().weekday() dates, open, high, low, close=np.loadtxt('data.csv', dtype=float, delimiter=',', usecols=(1, 3

javascript 中 split 函数分割字符串成数组

分割字符串成数组的方法有很多,不过使用最多的还是split函数 <script language="javascript"> str="2,2,3,5,6,6"; //这是一字符串 var strs= new Array(); //定义一数组 strs=str.split(","); //字符分割 for (i=0;i<strs.length ;i++ ) { document.write(strs[i]+"<b

Shell脚本中的函数、数组

Shell脚本中的函数 Shell脚本中的数组 原文地址:http://blog.51cto.com/13515599/2107416

Makefile中的函数

Makefile 中的函数 Makefile 中自带了一些函数, 利用这些函数可以简化 Makefile 的编写. 函数调用语法如下: $(<function> <arguments>) # 或者 ${<function> <arguments>} <function> 是函数名 <arguments> 是函数参数 1.1 字符串函数 字符串替换函数: $(subst <from>,<to>,<text&

C++调用lua中的函数

测试lua脚本 一.lua中的全局函数 lua中的全局函数保存在lua的global表里 二.lua模块中的函数 lua中的模块被放在lua的global表里,模块中的函数以变量的形式保存在模块表里,比如test模块里的PrintMessage函数保存在test表里,key为PrintMessage,value是函数体.所以调用模块里的函数,首先lua_getglobal把模块压入栈,接着lua_gettable或lua_getfield把函数压入栈,最后lua_pcall调用函数.

Oracle中REGEXP_SUBSTR函数(转)

Oracle中REGEXP_SUBSTR函数 Oracle中REGEXP_SUBSTR函数的使用说明: 题目如下:在oracle中,使用一条语句实现将'17,20,23'拆分成'17','20','23'的集合. REGEXP_SUBSTR函数格式如下:function REGEXP_SUBSTR(String, pattern, position, occurrence, modifier)__srcstr :需要进行正则处理的字符串__pattern :进行匹配的正则表达式__positio