自适应网站模板下载,网页设计培训哪好,盐城市规划建设局网站,指数是什么意思数组 1.定义数组1.1.普通数组1.2.关联数组1.3.数组常用定义方法 2.使用数组shell数组中* 和 区别 1.定义数组
数组也是一种变量#xff0c;常规变量只能保存一个值#xff0c;数组可以保存多个值 关联数组跟普通数组的区别#xff1a; 普通数组* 和 区别 1.定义数组
数组也是一种变量常规变量只能保存一个值数组可以保存多个值 关联数组跟普通数组的区别 普通数组通过索引来确定值 关联数组标签和值互相关联通过调用标签来获取标签对应的值。 引用数组${array_name[index]}
1.1.普通数组
只能用整数作为数组的索引用索引作为数组的标识即下标[0]/[1]
[rootlocalhost ~]# books( linux shell awk sed ) //在python中叫列表
[rootlocalhost ~]# echo ${books[0]}
linux
[rootlocalhost ~]# echo ${books[1]}
shell
[rootlocalhost ~]# echo ${books[2]}
awk1.2.关联数组
可以使用字符串作为数组的索引 关联数组需要提前声明通过declare命令来声明 Declare命令declare [-选项] 参数说明 -a 定义为数组–array普通数组 -A定义关联数组
[rootlocalhost ~]# declare -A myarry1 //先声明数组为关联数组
[rootlocalhost ~]# myarry1([name]tom [sex]man [age]18) //通过标签来确定值而不是通过索引号来确定值
[rootlocalhost ~]# echo ${myarry1[name]} //调用时通过调用数组[标签名]的方式来调用
tom
[rootlocalhost ~]# echo ${myarry1[age]}
18如果事先没有声明会发生什么呢
[rootlocalhost ~]# liangzai([name]liangzai [age]18 [sex]male)
[rootlocalhost ~]# echo ${liangzai[name]}
male
[rootlocalhost ~]# echo ${liangzai[age]}
male
//每次调用的都是最后一个标签的值设置完数组再声明可以么
[rootlocalhost ~]# declare -A liangzai
-bash: declare: liangzai: 无法将索引数组转化为关联数组得出结论在使用关联数组前一定要先声明该数组为关联数组
1.3.数组常用定义方法
定义方法1
[rootlocalhost ~]# declare -a myarry(5 6 7 8)
[rootlocalhost ~]# echo ${myarry[2]}
显示结果为 7定义方法2
[rootlocalhost ~]# array1( one two three four five six )
[rootlocalhost ~]# array2(tom jack alice)
[rootlocalhost ~]# array3(cat /etc/passwd) //希望是将文件中的每一行作为一个值赋给数组array3
[rootlocalhost ~]# array3($(cat /etc/passwd)) //或者这样写也可以
//执行结果
[rootlocalhost ~]# echo ${array3[0]}
root:x:0:0:root:/root:/bin/bash
[rootlocalhost ~]# echo ${array3[1]}
bin:x:1:1:bin:/bin:/sbin/nologin[rootlocalhost ~]# array4(tom jack alice bash shell)
[rootlocalhost ~]# array5(1 2 3 4 5 6 7 linux shell [20]saltstack)
//执行结果
[rootlocalhost ~]# echo ${array5[7]}
linux shell
[rootlocalhost ~]# echo ${array5[8]} //打印第8个索引为空[rootlocalhost ~]# echo ${array5[20]}
saltstack
#如果指定索引号和现有的冲突指定索引号的内容会覆盖原索引内容定义方法3自定义索引号
//语法数组名[index]变量值
[rootlocalhost ~]# vim array6.sh
#!/bin/bash
area[11]23
area[13]37
area[51]UFO//示例
[rootlocalhost ~]# vim shuzu.sh
#!/bin/bash
NAME[0]BJ
NAME[1]SH
NAME[2]SZ
NAME[3]GZ
NAME[4]HZ
NAME[5]ZZ
echo First Index: ${NAME[0]}
echo Second Index: ${NAME[1]}
echo sixth Index: ${NAME[5]}//输出结果
[rootlocalhost ~]# bash shuzu.sh
First Index: BJ
Second Index: SH
sixth Index: ZZ2.使用数组
[rootlocalhost ~]# vim a.sh //这里和*作用一样
#!/bin/bash
aa(哈哈哈 嘿嘿嘿 略略略 886)
echo 数组中第一个元素为${aa[0]} //访问数组中的第一个元素
echo 数组中所有的元素为${aa[]} //访问数组中所有的元素 等同与echo ${aa[*]}
echo 数组中元素的个数为${#aa[]} //统计元素的个数
echo 数组中每个索引为${!aa[]} //打印索引[rootlocalhost ~]# bash a.sh
数组中第一个元素为哈哈哈
数组中所有的元素为哈哈哈 嘿嘿嘿 略略略 886
数组中元素的个数为4
数组中每个索引为0 1 2 3
常见的应用场景
//批量创建用户在公司中按照部门来创建账号
op(liangzai1 liangzai2)
front(laowang laowu)
backend(laolu laochen)
test(laozhang laoluo)
//通过访问数组的方式批量创建用户
user(liangzai1 liangzai2 liangmei1 liangmei2)
for i in ${user[]}
doid $i /dev/null || useradd $iecho $i用户创建成功
done
[rootlocalhost ~]# id liangzai1
uid1001(liangzai1) gid1001(liangzai1) 组1001(liangzai1)
//删除用户
#!/bin/bash
user(liangzai1 liangzai2 liangmei1 liangmei2)
for i in ${user[]}
do#id $i /dev/null || useradd $i#批量删除用户id $i /dev/null userdel -r $i#echo $i用户创建成功echo $i用户删除成功
done
您可以访问数组中的所有项目通过以下方式之一
${array_name[*]}
${array_name[]}shell数组中* 和 “” 区别
关于在shell脚本中数组变量中“星号 * 跟”“区别 “星号 * 当变量加上双引号后会当成一串字符串处理会当成一个整体 ””当变量加上双引号后依然当做数组处理会挨个处理 在没有加上双引号的情况下效果是等效的
[rootlocalhost ~]# vim shuzu1.sh
#!/bin/sh
NAME[0]BJ
NAME[1]SH
NAME[2]SZ
NAME[3]GZ
NAME[4]HZ
echo ${NAME[*]}
echo ${NAME[]}
[rootlocalhost ~]# bash shuzu1.sh
BJ SH SZ GZ HZ
BJ SH SZ GZ HZ//示例
[rootlocalhost ~]# vim test1.sh
#!/usr/bin/env bash
array(gz cloud 19)
echo case 1
for line in ${array[]}
doecho $line
done
echo
echo case 2
for line in ${array[*]}
doecho $line
done
echo
echo case 3
for line in ${array[*]}
doecho $line
done
echo
echo case 4
for line in ${array[]}
doecho $line
done
echo //执行结果
[rootlocalhost ~]# bash test1.sh
case 1
gz
cloud
19
case 2
gz cloud 19
case 3
gz
cloud
19
case 4
gz
cloud
19