shell脚本day08-数组与字符串
数组:一段连续的变量,一段连续的内存存储空间;解决变量过多的问题,在使用用一类变量中,外面不需要去定义多个变量,而是以数组的方式来定义。
1.数组名
2.索引
3.值
一、如何定义数组:
declare -l 定义整数(声明)
declare -a 定义数组 array
declare -A 定义嵌套的数组
二、如何给数组赋值
array=0
1.array[0]=1 (在计算机语言中,索引一般从开始计算;索引并不一定是数字:key-valuearray[jack]=3m;shell中数组可以赋值可以跳跃)
2.array=(/var/log/*log)
做遍历
array=(a c n e)
3.array= ('jack=3m''rose=2m'...)
4.通过read命令来赋值
read -t 延迟 -p “指定说明” -a 输入数组所需的变量值
read -a a b c d e
三、如何调用数值
${变量名}
${数组名[索引]} 定义的是那个索引,看到的就是对应的索引的值
${数组名} 默认调用索引=0的值 $array
${数组名[*]}或者${数组名[@]} 调用数组内所有的值
a=(/var/log/*.log) for i in{0...7};do if [ $[$i/2] -eq 0] line='wc -l ${a[$i]} | cat -d ' '-f1' sum+=$line done echo $sum
1.调用数组的数组的长度
lenth{"变量"}
${#变量[*]}或$[#变量[@]]
2.添加数组值的特殊方法
$[变量名[${变量名[@]}]='值']
五、关于数组的其他操作:
数组切片
${变量名[@]:偏移量:所需取出的值的个数}
删除 unset ${变量名[索引]}
注意:删除的是索引对应值
六、字符串
printf
name=jack
heigth=180
python($s,身高为%d)%(name,heigth)
%s
%d
%f
%[num]s 指定该字符串占位的宽度
%-[num]s 代表左对齐
1.字符串切片
数组切片:$[变量[@]:偏移量:数值个数]
字符串:$[变量名:偏移量:数值个数]
$[变量名:-数值个数] 【注意:冒号后面一定要加空格】
$[变量名:word] //默认赋值
read"sasas":test
[-z $test]&&test=abc
2.基于模式取字串
从左到右
$[变量名#pattern] 删除PATTERN第一次匹配到的字符
从右到左
$[变量名%pattern]
3.字符替换
$[变量名/pattern/替换后的字符] 【pattern并不是正则表达式,而是文件通配符】
匹配到的第一个pattern来进行替换
$[变量名//pattern/替换后的字符串]
匹配所有的pattern并进行替换
$[变量名/#pattern/替换后的字符串] $[变量名/%pattern/替换后的字符串]
4.查找并删除
替换中,不能指定替换的字符串,即为删除
$[变量名/pattern]
$[变量名//pattern]
$[变量名/#pattern]
$[变量名/@pattern]
5.替换大小写
tr 替换大小写
tr [:lower:][:upper:]<filename
$[变量名^ ^]将字符全部替换为大写
$[变量名,,]将字符全部替换为小写
6.变量赋值
变量名 1=$[变量名2:-word] 注意没有空格 当变量2没有值,就将word默认值赋值给变量1
变量名 1=$[变量名2:+word] 当变量2有值的情况下,才将word默认值赋值给变量1