shell 中的函数
函数就是把一段代码整理到了一个小单元中, 并给这个小单元起一个名字, 当用到这段代码时直接调用这个小单元的名字即可
格式: function f_name() {?? ?? ?? ?? ?? ?? ? command? ?? ?? ?? ?}
函数必须要放在最前面
脚本示例 1(用来定义函数打印参数)
- [root@garytao-01 aming]# vim fun1.sh
- [root@garytao-01 aming]# cat fun1.sh
- #!/bin/bash
- function inp(){
- echo $1 $2 $3 $0 $#
- }
- inp 1 a 2
- [root@garytao-01 aming]# sh fun1.sh
- 1 a 2 fun1.sh 3
- [root@garytao-01 aming]# sh -x fun1.sh
- + inp 1 a 2
- + echo 1 a 2 fun1.sh 3
- 1 a 2 fun1.sh 3
- [root@garytao-01 aming]# vi fun1.sh
- [root@garytao-01 aming]# cat 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 b a 2 3 adf
- [root@garytao-01 aming]# sh fun1.sh
- The first par is b
- The second par is a
- The third par is 2
- the scritp name is fun1.sh
- the number of par is 5
- [root@garytao-01 aming]# sh -x fun1.sh
- + inp b a 2 3 adf
- + echo The first par is b
- The first par is b
- + echo The second par is a
- The second par is a
- + echo The third par is 2
- The third par is 2
- + echo the scritp name is fun1.sh
- the scritp name is fun1.sh
- + echo the number of par is 5
- the number of par is 5
- [root@garytao-01 aming]#
脚本示例 2(用来定义一个加法的函数)
- [root@garytao-01 aming]# vim fun2.sh
- [root@garytao-01 aming]# cat fun2.sh
- #!/bin/bash
- sum() {
- s=$[$1+$2]
- echo $s
- }
- sum 1 2
- [root@garytao-01 aming]# sh fun2.sh
- 3
- [root@garytao-01 aming]# sh -x fun2.sh
- + sum 1 2
- + s=3
- + echo 3
- 3
- [root@garytao-01 aming]#
脚本示例 3(用来定义显示 IP)
- [root@garytao-01 aming]# vim fun3.sh
- [root@garytao-01 aming]# cat fun3.sh
- #!/bin/bash
- ip()
- {
- ifconfig |grep -A1 "$1:"|awk /inet/ {print $2}
- }
- read -p "Please input the eth name:" eth
- ip $eth
- [root@garytao-01 aming]# sh fun3.sh
- Please input the eth name: ens33
- 172.16.111.100
- [root@garytao-01 aming]# sh -x fun3.sh
- + read -p Please input the eth name: eth
- Please input the eth name: ens33
- + ip ens33
- + grep -A1 ens33:
- + awk /inet/ {print $2}
- + ifconfig
- 172.16.111.100
shell 中的数组
1.shell 中的数组 1
定义数组 a=(1 2 3 4 5); echo ${a[@]}
echo ${#a[@]} 获取数组的元素个数
echo ${a[2]} 读取第三个元素, 数组从 0 开始
echo ${a[*]} 等同于 ${a[@]} 显示整个数组
数组赋值
a[1]=100; echo ${a[@]}
a[5]=2; echo ${a[@]} 如果下标不存在则会自动添加一个元素
数组的删除
- unset a; unset a[1]
- [root@garytao-01 aming]# b=(1 2 3)
- [root@garytao-01 aming]# echo ${b[@]}
- 1 2 3
- [root@garytao-01 aming]# echo ${b[*]}
- 1 2 3
- [root@garytao-01 aming]# echo ${b[1]}
- 2
- [root@garytao-01 aming]# echo ${b[2]}
- 3
- [root@garytao-01 aming]# echo ${b[0]}
- 1
- [root@garytao-01 aming]# echo ${#b[@]}
- 3
- [root@garytao-01 aming]# b[3]=a
- [root@garytao-01 aming]# echo ${b[*]}
- 1 2 3 a
- [root@garytao-01 aming]# b[3]=aaa
- [root@garytao-01 aming]# echo ${b[*]}
- 1 2 3 aaa
- [root@garytao-01 aming]# unset b[3] // 删除数组
- [root@garytao-01 aming]# echo ${b[*]}
- 1 2 3
- [root@garytao-01 aming]# unset b
- [root@garytao-01 aming]# echo ${b[*]}
- [root@garytao-01 aming]#
2.shell 中的数组 2
数组分片
a=(seq 1 5)
echo ${a[@]:0:3} 从第一个元素开始, 截取 3 个
echo ${a[@]:1:4} 从第二个元素开始, 截取 4 个
echo ${a[@]:0-3:2} 从倒数第 3 个元素开始, 截取 2 个
数组替换
- echo ${a[@]/3/100}
- a=(${a[@]/3/100})
- [root@garytao-01 aming]# a=(`seq 1 10`)
- [root@garytao-01 aming]# echo ${a[*]}
- 1 2 3 4 5 6 7 8 9 10
- [root@garytao-01 aming]# echo ${a[@]:3:4}
- 4 5 6 7
- [root@garytao-01 aming]# echo ${a[@]:0-3:2}
- 8 9
- [root@garytao-01 aming]# echo ${a[@]/8/6}
- 1 2 3 4 5 6 7 6 9 10
- [root@garytao-01 aming]# a=(${a[@]/8/6})
- [root@garytao-01 aming]# echo ${a[@]}
- 1 2 3 4 5 6 7 6 9 10
- [root@garytao-01 aming]#
告警系统需求分析
1.shell 项目 - 告警系统
需求: 使用 shell 定制各种个性化告警工具, 但需要统一化管理规范化管理
思路: 指定一个脚本包, 包含主程序子程序配置文件邮件引擎输出日志等
主程序: 作为整个脚本的入口, 是整个系统的命脉
配置文件: 是一个控制中心, 用它来开关各个子程序, 指定各个相关联的日志文件
子程序: 这个才是真正的监控脚本, 用来监控各个指标
邮件引擎: 是由一个 python 程序来实现, 它可以定义发邮件的服务器发邮件人以及发件人密码
输出日志: 整个监控系统要有日志输出
要求: 我们的机器角色多种多样, 但是所有机器上都要部署同样的监控系统, 也就说所有机器不管什么角色, 整个程序框架都是一致的, 不同的地方在于根据不同的角色, 定制不同的配置文件
bin 下是主程序;
conf 下是配置文件;
shares 下是各个监控脚本;
mail 下是邮件引擎;
log 下是日志
shell 中的函数 shell 的数组告警系统需求分析
来源: http://www.bubuko.com/infodetail-2491668.html