欢迎各位兄弟 发布技术文章
这里的技术是共享的
https://www.y2b.com/watch?v=nyF_QBS5cQA&list=PLwDQt7s1o9J4FMviSY4p5rhC43kBPvJvO
【千锋Linux】Shell脚本入门全套教程(103集)
接下来播放:千锋Linux教程:99 项目实战 多机部署lnmp
【千锋Linux】Shell脚本入门全套教程(103集)98 / 10398 / 103
1 千锋Linux教程:1 Shell 能做什么?(上)
2 千锋Linux教程:2 Shell 能做什么?(下)
3 千锋Linux教程:3 C Java Python Shell 执行方式对比(上)
4 千锋Linux教程:4 C Java Python Shell 执行方式对比(下)
5 千锋Linux教程:5 Bash中调用python Expect
6 千锋Linux教程:6 Shell特性 Login Nologin
7 千锋Linux教程:7 Shell特性 Jobs Redirection
8 千锋Linux教程:8 Shell特性 命令排序
9 千锋Linux教程:9 Shell特性 元字符
10 9:56 9:56 千锋Linux教程:10 Echo 颜色输出文本
11 千锋Linux教程:11 变量 脚本中使用变量
12 千锋Linux教程:12 变量 环境及自定义变量
13 千锋Linux教程:13 变量 位置及预定义变量实战
14 千锋Linux教程:14 变量 的赋值方式
15 千锋Linux教程:15 变量 的运算 整数小数
16 千锋Linux教程:16 变量 内容的删除 替换 替代
17 千锋Linux教程:17 变量 I++ ++i
18 千锋Linux教程:18 Shell脚中各种奇怪的符号
19 千锋Linux教程:19 条件测试概述
20 千锋Linux教程:20 条件测试 文件测试
21 千锋Linux教程:21 条件测试 内存磁盘使用告警
22 千锋Linux教程:22 条件测试 按套路出牌 创建用户
23 千锋Linux教程:23 条件测试 不按套路出牌 创建用户
24 千锋Linux教程:24 Case 多系统配置yum源
25 千锋Linux教程:25 Case 删除用户判断
26 千锋Linux教程:26 Case 实现jump Server 上
27 千锋Linux教程:27 Case 实现jump Server 下
28 千锋Linux教程:28 Case 实现简单的系统工具箱
29 千锋Linux教程:29 If条件判断 安装apache
30 千锋Linux教程:30 If条件判断 安装apache
31 千锋Linux教程:31 If条件判断 多系统配置yum源
32 千锋Linux教程:32 If条件判断 作业解析
33 千锋Linux教程:33 For 空行的秘密
34 千锋Linux教程:34 For 实现批量主机ping探测
35 千锋Linux教程:35 For 实现批量用户创建
36 千锋Linux教程:36 For 实现文件中批量用户创建
37 千锋Linux教程:37 For 实现批量远程主机ssh配置
38 千锋Linux教程:38 While 实现批量用户创建
39 千锋Linux教程:39 While Until 测试远程主机连接
40 千锋Linux教程:40 For While Until 终极对决
41 千锋Linux教程:41 Fd和命名管道实现shell并发控制
42 千锋Linux教程:42 Shell 并发控制项目实战
43 千锋Linux教程:43 For 实现批量主机密码修改
44 千锋Linux教程:44 Expect 实现scp非交互传输文件
45 千锋Linux教程:46 Expect 实现ssh非交互登录
46 千锋Linux教程:45 Expect 实现批量主机公钥推送
47 千锋Linux教程:47 Array 数组的基本概念
Shell数组变量
========================================================
普通数组:只能使用整数作为数组索引
关联数组,可以使用字符串作为数组索引
一、 普通数组
定义数组:
方法一:一次赋一个值
数组名[下标]=变量值
# array1[0]=pear
# array1[ 1]=apple
# array1[2 ]=orange
# array1[3]=peach
方法二: -次赋多个值
# array2=(tom jack alice)
# array3=(`cat /etc/passwd`) 希望是将该文件中的每-一个行作为一个元素赋值给数组array3,,,可能有分隔符会导致不准,我们可以重新定义分隔符
# array4=( `Is /var/ftp/Shel/for* `)
# array5=(tom jack alice "bash shell")
# colors=($red $blue $green $recolor)
# array5=(1 2 3 4 5 6 7 "Iinux shell" [20]=puppet) #这里 puppet 的索引是20,,前面几个的索引,是从0开始的,中间的索引跳过去了
下图是数组示例
普通数组示例
[ root@tianyun scripts ]# books=(linux shell awk openstack docker )
[ root@tianyun scripts]# echo ${books[3]}
openstack
[ root@tianyun scripts]# echo ${books [4]}
docker
[ root@tianyun scripts]#|
关联数组需要申明,shell默认不支持关联数组
定义关联数组:
申明关联数组变量
# declare -A ass_array1 # -A ,,大A 是申明关联数组 必须要先声明
# declare -A ass_array2
方法一: 一次赋一个值
数组名[索引]=变量值
# ass_array1[index1f=pear
# ass_array1[index2]=apple
# ass_array1[index3]= orange
# ass_array1[index4]=peach
方法二: 一次赋多个值
# ass_ array2=([index1]=tom [index2]=jack [index3]= alice [index4]="bash shell)
定义普通数组:
# declare -a array1 # -a ,,小a 是申明普通数组,,, 可以不声明
# declare -a array2
查看数组,
# declare'a
declare -a array1=''([0]="pear" [1]= "apple" [2]="orange" [3]="peach")'
declare -a array2='([0]="tom" [1]="jack" [2]="alice")'
访问数组元数:
# echo ${array1[0]} 访问数组中的第一个元数
# echo ${array1[@]} 访问数组中所有元数等同于echo ${array1[*]} ,无论普通数组还是关联数组,只能看到值,看不到键
# echo ${#array1[@]} 统计数组元数的个数 井号用在普通变量上是看长度,用在数组里是看个数
# echo ${!array2[@]} 获取数组元数的所有的索引 # array2=(aa bb cc) # echo ${!array2[@]} #结果为 0 1 2
# echo ${array1[@]:1}从数组 下标1开始 ,只有普通数组才可以切片操作,关联数组不能切片操作,因为关联数组没有数字索引
类似于如下的字符中变量的示例
[ root@tianyun scripts]# name=tianyun
[ root@tianyun scripts]# echo ${niame:2} #从索引2到最后,切片操作
anyun
[ root@tianyun scripts]# echo ${name:2:2} $ #从索引2开始,取2个,切片操作
an
# echo ${array1[@]:1:2}从数组下标1开始,访问两个元素
查看数组:
# declare -A
declare -A ass_array1='([index4]="peach" [index1]="pear" [index2]="apple" [index3]="orange")'
declare -A ass_array2='([index4]= "bash shell" [index1]= "tom" [index2]="jack" [index3]="alice")'
访问数组元数:
# echo ${ass_array2[index2]} 访问数组中的第二个元数
# echo ${ass_array2[@]} 访问数组中所有元数等同于echo ${array1[*]}
# echo ${ #ass_array2[@]} 获得数组元数的个数
# echo ${!ass_array2[@]} 获得数组元数的索引
逼历数组:
方法一:通过数组元数的索引进行逼历
[root@tianyun scripts]# infol=([name]tianyun [sex]male[age]36 [height]170 [skill]cloud) #这个程序认为是一个普通数组
关联数组示例 关联数组,似乎在macos情况下有些运行不正常
[root@tianyun scripts]# declare -A info1
[root@tianyun scripts]# info1=([name]=tianyun [sex]=male [age]=36 [height]=170 [skill]=cloud)
[root@tianyun scripts]# echo ${info1[age]}
36
没有申明info2 ,,此时 echo ${info2[age]} 结果是不对的,,,,所以关联数组必须要首先申明一下
[root@tianyun scripts]# info2=([name ]=tianyun [sex]=male [age]=36 [height]=170 [skill]=cloud) .
[root@tianyun scripts]# echo ${info2[age]}
cloud
[root@tianyun scripts]#
[ root@tianyun scripts]# declare --help # declare -a (普通数组) ,,,# declare -i (数字) ,,, 这些都无须声明,,,,,,但是 declare -A (关联数组) 需要声明
-bash: declare: --: invalid option
declare: usage: declare [ -aAfFgilrtux] [-p] [name [=value] ...]
[root@tianyun scripts]#
[ root@tianyun scripts]# declare -a #declare -a ,查看 shell 当中所有的 普通数组的变量
declare -a BASH_ ARGC='() '
declare -a BASH_ _ARGV='()'
declare -a BASH_ _LINENO='()'
declare -ar BASH_ REMATCH='()'
declare -a BASH_ SOURCE='()'
declare -ar BASH_ VERSINFO='([0]="4" [1]="2" [2]="46" [3]="1" [4]=" release" [5]="x86
_64- redhat-linux-gnu") '
declare -a DIRSTACK=' () '
declare -a FUNCNAME='() '
declare -a GROUPS='( )
declare -a PIPESTATUS='([0]="2") '
declare -a books='([0]="linux" [1]="shell" [2]=" awk" [3]=" openstack" [4]=" docker")'
declare -a inf1='([0]=" [name]tianyun" [1]=" [sex]male" [2]=" [age]36" [3]=" [height ]17
0" [4]=" [skill]cloud")'
declare -a info='( []=" [name]tianyun" [1]=" [sex]male" [2]=" [age]36" [3]=" [height]17
0" [4]="[skill]cloud") '
declare -a info2='([0]="cloud") '
[root@tianyun scripts]#
[ root@tianyun scripts]# declare -A | grep info #同理,declare -A ,查看 shell 当中所有的 关联数组的变量
...... ......
declare -A infol='( [name ]="tianyun" [height]="170" [age]="36" [skill]=" cloud" [sex]="male" )'
[ rootatianyun scripts]# echo ${!books[@]} #获取数组的键,是普通数组的键
0 1 2 3 4
[ root@tianyun scripts]# echo ${!info1[@]} #也是获取数组的键,是关联数组的键
name height age skill sex
[ root@tianyun scripts]#
[ root@tianyun scripts]# echo ${books[@]:2} #从2开始到最后,切片操作
awk openstack docke r
[root@tianyun scripts]# echo ${books[@]:2:2} #从2开始限2个,切片操作
awk openstack
[ rootatianyun scripts]#
48 千锋Linux教程:48 Array 数组的赋值及遍历
49 千锋Linux教程:49 Array 实现性别统计
50 千锋Linux教程:50 Array 统计不同类型shell的数量
51 千锋Linux教程:51 Array 统计tcp连接状态数量
52 千锋Linux教程:52 Funtion 函数的定义及调用
53 千锋Linux教程:53 Funtion 函数的返回 Return Out
54 7:06 7:06 千锋Linux教程:54 Funtion 函数的返回 Return Out
55 千锋Linux教程:55 函数传参 位置参数
56 千锋Linux教程:56 函数传参 数组变量
57 千锋Linux教程:57 函数返回 输出数组变量 上
58 千锋Linux教程:58 函数返回 输出数组变量 下
59 千锋Linux教程:59 shell内置命令 break continue
60 千锋Linux教程:60 Shell内置命令 Shift
61 千锋Linux教程:61 正则表达式概览 Re
62 千锋Linux教程:62 正则表达则元字符详解
63 千锋Linux教程:63 正则表达则元字符详解
64 千锋Linux教程:64 正则表达则元字符详解
65 千锋Linux教程:65 正则表达式 Grep使用实战
66 千锋Linux教程:66 正则表达式 Grep使用实战
67 千锋Linux教程:67 流编辑器sed技术概览
68 千锋Linux教程:68 流编辑器sed 定址
69 千锋Linux教程:69 流编辑器sed命令 P D S
70 千锋Linux教程:70 流编辑器sed命令 R W A I C 及暂存空间
71 千锋Linux教程:71 流编辑器sed 编辑文件实战
72 千锋Linux教程:72 Awk工作原理概览
73 千锋Linux教程:73 Awk内部变量 Fs Ofs Rs Ors Nr Fnr
74 千锋Linux教程:74 Awk模式详解 正则 条件
75 千锋Linux教程:75 Awk模式详解 算术 逻辑 范围
76 千锋Linux教程:76 Awk脚本编程 If While For
77 千锋Linux教程:77 脚本编程实战 数组
78 千锋Linux教程:78 脚本编程实战 数组分析nginx apache 日志
79 千锋Linux教程:79 Awk使用外部变量的三种方法
80 千锋Linux教程:80 实战项目 收集系统信息用于分析性能瓶颈
81 千锋Linux教程:81 实战项目 收集系统信息用于分析性能瓶颈
82 千锋Linux教程:82 实战项目 收集系统信息用于分析性能瓶颈
83 千锋Linux教程:83 实战项目 收集系统信息用于分析性能瓶颈
84 千锋Linux教程:84 实战项目 收集系统信息用于分析性能瓶颈
85 千锋Linux教程:85 实战项目 判断主机存活三次机会
86 千锋Linux教程:86 实战项目 判断主机存活三次机会
87 千锋Linux教程:87 实战项目 判断主机存活三次机会
88 千锋Linux教程:88 实战项目 Nginx日志分析项目实战
89 千锋Linux教程:89 实战项目 Nginx日志分析项目实战
90 千锋Linux教程:90 实战项目 Nginx日志分析项目实战
91 千锋Linux教程:91 实战项目 Nginx日志分析项目实战
92 千锋Linux教程:92 实战项目 保留最近n天的备份文件
93 千锋Linux教程:93 实战项目 保留最近n天的备份文件
94 千锋Linux教程:94 项目实战 多机mysql部署
95 千锋Linux教程:95 项目实战 多机mysql部署
96 千锋Linux教程:96 项目实战 多机mysql部署
97 千锋Linux教程:97 项目实战 多机部署lnmp
98 千锋Linux教程:98 项目实战 多机部署lnmp
99 千锋Linux教程:99 项目实战 多机部署lnmp
100 千锋Linux教程:100 项目实战 多机部署lnmp
101 千锋Linux教程:101 项目实战 Tcp连接状态收集(配合zabbix)
102 千锋Linux教程:102 项目实战 Mysql状态信息收集(配合zabbix)
103 千锋Linux教程:103 项目实战 内存信息收集(配合zabbix)