数组与字符串
数组与字符串
数组:数组就是一段连续得变量,一段连续得内存存储空间
解决:变量过多的问题,在同一类变量中,我们不需要去定义多个名字,而是以数组的方式来定义;(列表)
1、数组名 2、索引 3、值
如何去定义数组:
declare -i 定义整数(申明)
declare -a定义数组array
declare -A 定义嵌套数组
如何给数组赋值:
array =0
array[0]=a (在计算机语言中,索引一般从0开始计算)
(索引并不一定是数字,key-value array[a]=1)
(shell中数组赋值,可以跳跃(跳跃赋值))
array=(/var/log*.log) 做遍历
array=(a b c d e)
array=(‘豆腐=233’‘豆腐花=122’)
通过read命令来赋值:
read –t 延迟 –p “指定说明” –a输入数组所需要的变量值
read –a a b c d e
如何去调用数组:
${变量名}
${数组名[索引]} 定义的是哪个索引,就看到是对应索引指定的值
${数组名} 默认调用 索引=0的值
${数组名[*]或者${数组名[@]}调用数组内所有的值
练习:统计/var/log/*.log中索引为偶数的文件的行数的和;
declare -a a=(/var/log/*.log)
declare –i sum=0
for I in {0..7};do
if [$[$i/2]-eq 0]
line=`wc –l ${a[$i]} |cut –d’ ’ –f1`
sum+=$line #sum+=`wc –l ${a[$i]} |cut –d’ ’ –f1`
fi
done
echo”行数总和为:$sum”
1、调用数组的数组长度
Length(“变量”)
${#变量名[*]} 或者 ${#变量名[@]}
2、添加数组值的特殊方式
${变量名[${#变量名[@]}]}=”值” 或者 ${变量名[${#变量名[*]}]}=”值”
关于数组的其他操作
数组切片 ${变量名[@]:偏移量:所需要取出值得个数}
echo ${a[*]:2:4}
${变量名[@]:偏移量}
删除值 unset ${变量名[索引]} unset a[0]
注意:删除是索引所对得值,而没有带着索引一块删除;
declare –a a
declare –i max=0
for i in` seq 0 9` ;do
a[$i]=$RANDOM
[${a[$i]} –gt $max]&& max=${a[$i]}
done
echo ${a[@]}
echo “最大值为:”
字符串:%s %d %f
%[num]s 指定该字符串占位的宽度
%-[num]s 代表左对齐
字符串切片:
数组切片:${变量名[@]:偏移量:数值个数}
字符串:${变量名:偏移量:数值个数}
${变量名:-数值个数} 【注意:冒号后面一定要加空格】
${变量名:-word} 默认赋值的意思
基于模式取子字符串
${变量名#*pattren} 删除pattern第一次匹配到的字串
${变量名##*pattren} 删除所有pattern匹配到的字串 */任意字符到斜杠
${变量名%pattren}
${变量名%%pattern}
字符替换
${变量名/pattern/替换后的字符串}
${变量名//pattern/替换后的字符串} 匹配所有的pattern,并进行替换
${变量名/#pattern/替换后的字符串} 指定匹配行首必须是pattern,才会替换
${变量名/%pattern/替换后的字符串} 指定匹配行尾必须是pattern,才会替换
【注意:/分隔符,不能替换为(#%等特殊字符)】
大小写替换
tr 替换大小写
tr[[:lower:]][[:upper:]]< filename
${变量名^^} 将字符串全部替换为大写
${变量名,,} 将字符串全部替换为小写
6、变量赋值
${变量名:-word} 注意没有空格
${变量名:+word}
7、脚本应用其他文件中的变量,如何实现?
练习:修改hostname,定义—个hostname文件 name=xxx,hostname.sh
8、两个命令
mktemp 创建临时文件以及目录 temp--/tmp
避免大家取的文件名字重复; mktemp 名字 xxxxx 代表随机数(字母和数字)
默认创建随机的文件
-d 创建的就是随机的目录
install 复制或删除文件,用法同copy
优点可以指定权限来复制文件
用法:intall a文件b目录 //复制a文件到b目录,并恢复初始权限(文件:755 目录:644)
chroot 切换根目录;