数组:存储多个元素的连续的内存空间,相当于多个变量的集合
1)定义数组:
declare -a ARRAY_NAME 定义普通数组 可省略declare -a
]#arr=(a b c d e f)
declare -A ARRAY_NAME 定义关联数组 即可自定义索引,可为字符、字符串等
2)索引:
类似于C语言,数组元素的下标由0开始编号。关联数组则由对应的键
3)数组元素赋值:
1.一次附值一个元素:
array_name[0]=value0
2.一次赋值全部元素: 中间空格隔开;若某个值中含空格则需引号
ARRAY_NAME=("VAL1" "VAL2" "VAL3" ...)
3.只赋值特定元素: 可不连续的赋值
ARRAY_NAME=([0]="VAL1" [3]="VAL2" ...)
4.交互式数组值对赋值:不可管道传递数据
read -a ARRAY
4)数组的长度 元素的个数 非索引
${#ARRAY_NAME[*]}
${#ARRAY_NAME[@]}
5)数组操作:
1.引用数组中的元素:
${ARRAY_NAME[INDEX]} 省略[INDEX]则默认引用第一个元素,即arr[0]
利用下标获取数组中指定的元素,下标可以是整数或算术表达式,其值应大于或等于0。
所有元素:${ARRAY[@]}, ${ARRAY[*]}
数组切片:${ARRAY[@]:offset:number}
offset: 要跳过的元素个数
number: 要取出的元素个数
取偏移量之后的所有元素
${ARRAY[@]:offset}
]#echo ${arr[*]:2:3} c d e
显示数组arr第2个元素之后的3个元素
2.指定删除数组中的某个元素
unset ARRAY[INDEX]
练习 冒泡排序:
#!/bin/bash #zjj for((i=0;i<10;i++));do rand[$i]=$RANDOMdone echo ${rand[@]} echo --------------------- for((j=0;j<10;j++));do for((k=j;k<9;k++));do if [ ${rand[$j]} -gt ${rand[$[k+1]]} ];then tmp=${rand[$j]} rand[$j]=${rand[$[k+1]]} rand[$[k+1]]=$tmp else continue fi done done echo ${rand[@]}
======>
字符串处理:
仅显示有变化,未对变量值进行更改
]#var=123456
1)字符串切片:
${#var}:返回字符串变量var的长度
]# echo ${#var} 6
${var:offset}:返回字符串变量var中从第offset个字符后所有字符
offset取值在0 到${#var}-1 之间
]# echo ${var:2} 3456
${var:offset:number}:返回字符串变量var中从第offset个字符后number个字符
]# echo ${var:2:3} 345
${var: -lengh}:取字符串的最右侧几个字符
注意:冒号后必须有一空白字符
]# echo ${var: -2} 56
${var:offset:-lengh}:从最左侧offset字符之后,到最右侧lengh个字符之前
(bash4.2后,允许为负值)
]# echo ${var:2: -1} 345
2)基于模式取子串
]#var=root:x:0:0:root:/root:/bin/bash
1.自左而右:
${var#*word}:其中word可以为指定的任意字符
删除第一次出现的word及其前面的字符
]# echo ${var#*root} :x:0:0:root:/root:/bin/bash
${var##*word}:
同上,不同的是,删除到最后一个匹配到的字符
]# echo ${var##*root} :/bin/bash
2.自右而左:
${var%word*}:其中word可以是指定的任意字符;
删除自右向左第一个word及其后面的字符
]# echo ${var%root*} root:x:0:0:root:/
${var%%word*}:
同上,不同,删除自右向左最后一次出现word及其后的所有字符
]# echo ${var%%root*}
3)查找替换、删除:
${var/pattern/substi}:
第一次 被pattern所匹配到的字符串,以substi替换之
${var//pattern/substi}:
所有 被pattern所匹配到的字符串,以substi替换之
${var/#pattern/substi}:
行首 被pattern所匹配到的字符串,以substi替换之
${var/%pattern/substi}:
行尾 被pattern所匹配到的字符串,以substi替换之
删除:
${var/pattern}:查找var值中,删除第一次被pattern所匹配到的字符串
${var//pattern}:所有
${var/#pattern}:行首
${var/%pattern}:行尾
4)字符大小写转换:
${var^^}:把var中的所有小写字母转换为大写
${var,,}:把var中的所有大写字母转换为小写
变量赋值:
${var:-value}:如果var为空或未设置,那么返回value;否则,则返回var的值
${var:+value}:如果var不空,则返回value,否则返回空值
${var:=value}:var为空或未设置,那么返回value,并将value赋值给var;否则,则返回var的值
${var:?error_info}:var为空或未设置,那么在当前终端打印error_info;否则,则返回var的值
#declare [选项] 变量名
-r 将变量设置为只读属性
-i 将变量定义为整型数
-a 将变量定义为数组
-A 将变量定义为关联数组
-f 显示此脚本前定义过的所有函数名及其内容
-F 仅显示此脚本前定义过的所有函数名
-x 将变量声明为环境变量
-l 将变量值转为小写字母declare –l var=UPPER
-u 将变量值转为大写字母declare –u var=lower
间接变量引用:
第一个变量的值是第二个变量的名字,
从第一个变量引用第二个变量的值称为间接变量引用
var1=var2
var2=value
此时打印var1的值为var2,非value
bash Shell提供了两种格式实现间接变量引用
eval var3=\$$var1 eval命令 对变量进行两次扫描
echo ${!var1}
]# var1=var2 ]# var2=zjj ]# echo ${!var1} zjj ]# eval var3=\$$var1 ]# echo $var3 zjj
#mktemp[OPTION]... [TEMPLATE] 创建临时文件(随机文件名)可避免冲突
-d 创建临时目录
-p DIR 指定临时文件所存放目录的位置
TEMPLATE: filename.XXX
X至少要出现三个,代表几个随机字符
#install 安装复制文件 编译安装时常用 可直接将二进制文件赋予权限
-m MODE 指定权限 默认755
-o OWNER 指定属主
-g GROUP 指定属组
本文出自 “平平无奇” 博客,请务必保留此出处http://zzjasper.blog.51cto.com/9781564/1841356
原文地址:http://zzjasper.blog.51cto.com/9781564/1841356