9.18任务

20.16/17 shell中的函数

SHELL中的函数更像是一个子shell。

函数要放在最前面,后面才可以引用。

#!/bin/bash

function inp()
{
    echo $1 $2 $3 $0 $#
}

inp 1 a 2

function可以省略,建议写全。

root@lhy-server:~/shell_script# bash fun1.sh 
1 a 2 fun1.sh 3

$1,$2,$3....分别表示第一个、第二个、第三个....参数,$0表示脚本名,$#表示参数的个数。

#!/bin/bash

function inp()
{
    echo $1 $2 $3 $0 $#
}

inp 1 a 2
echo "======="
inp 3 b

root@lhy-server:~/shell_script# bash fun1.sh 
1 a 2 fun1.sh 3
=======
3 b fun1.sh 2

求和函数

#!/bin/bash

function sum()
{
    sum=$[$1+$2]
    echo $sum
}

sum 1 2
root@lhy-server:~/shell_script# bash -x fun2.sh 
+ sum 1 2
+ sum=3
+ echo 3
3

查看某网卡的ip地址,

#!/bin/bash

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

ip $1
root@lhy-server:~/shell_script# bash fun3.sh enp2s0
192.168.0.109

这个脚本一定要按照自己的系统,自己的需求去写,这条命令不适用于多平台,读者需要自己改一改。

脚本也可以写成交互

#!/bin/bash

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

read -p "Please input your eth name : " name
ip $name

改进的话加两个判断,第一个是判断此网卡是否存在,第二个判断是没有ip输出警告。

第一个比较容易,第二个留个作业。

#!/bin/bash

function ip()
{
    check_name=`ifconfig | grep '^ ' -v | grep '^$' -v | awk '{print $1}' | grep $1`
    if [ -z "$check_name" ]
    then
        echo $1 not found
        return 0
    fi
    ifconfig | grep -A1 "$1 " | tail -1 | awk '{print $2}' | awk -F':' '{print $2}'
}

read -p "Please input your eth name : " name
ip $name
root@lhy-server:~/shell_script# bash fun3.sh 
Please input your eth name : tu
tu not found
root@lhy-server:~/shell_script# bash fun3.sh 
Please input your eth name : lo
127.0.0.1


20.18 shell中的数组

虽然使用数组的机会不多,但是我们也是要了解的。

root@lhy-server:~/shell_script# a=( 1 2 3)
root@lhy-server:~/shell_script# echo $a
1
root@lhy-server:~/shell_script# echo ${a[@]}
1 2 3
root@lhy-server:~/shell_script# echo ${a[*]}
1 2 3
root@lhy-server:~/shell_script# echo ${a[0]}
1
root@lhy-server:~/shell_script# echo ${a[1]}
2
root@lhy-server:~/shell_script# echo ${a[2]}
3
root@lhy-server:~/shell_script# echo ${a[3]}

数组的申请是小括号,直接输出$a就是数组a的第一个元素,可以用@和*通配。

而且可以变长。

root@lhy-server:~/shell_script# echo ${a[@]}
1 2 3 a
root@lhy-server:~/shell_script# echo ${a[4]}

root@lhy-server:~/shell_script# echo ${a[5]}
a

虽然中间间隔一个,但是标号其实是对的。

root@lhy-server:~/shell_script# unset a[5]
root@lhy-server:~/shell_script# echo ${a[4]}

root@lhy-server:~/shell_script# echo ${a[@]}
1 2 3
root@lhy-server:~/shell_script# a[0]=b
root@lhy-server:~/shell_script# echo ${a[@]}
b 2 3

unset可以取消某一个值。

也可以取消整个数组。

也可以按段取值。

root@lhy-server:~/shell_script# a=(`seq 0 9`)
root@lhy-server:~/shell_script# echo ${a[@]}
0 1 2 3 4 5 6 7 8 9
root@lhy-server:~/shell_script# echo ${a[@]:0:3}
0 1 2
root@lhy-server:~/shell_script# echo ${a[@]:1:3}
1 2 3
root@lhy-server:~/shell_script# echo ${a[@]:0-0:3}
0 1 2
root@lhy-server:~/shell_script# echo ${a[@]:0-1:3}
9
root@lhy-server:~/shell_script# echo ${a[@]:0-3:3}
7 8 9

这里的语法和python很类似。

数组的替换和sed很像。

root@lhy-server:~/shell_script# echo ${a[@]/3/a}
0 1 2 a 4 5 6 7 8 9
root@lhy-server:~/shell_script# echo ${a[@]}
0 1 2 3 4 5 6 7 8 9

不会改变数组。想改变数组可以这么做

root@lhy-server:~/shell_script# a=(${a[@]/3/a})
root@lhy-server:~/shell_script# echo ${a[@]}
0 1 2 a 4 5 6 7 8 9


20.19 告警系统需求分析

需求:使用shell定制各种个性化告警工具,但需要统一化管理、规范化管理。虽然有zabbix可能替我们做大部分事情,zabbix需要写自定义脚本但是需求ip通信畅通,我们就可以用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下是日志。

转载于:https://my.oschina.net/u/3866688/blog/2054895

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值