数组
数组说白了就是一段连续的变量,一段连续的内存存储空间
解决变量过多的问题,在同一类变量中,我们不需要去定义多个名字,而是以数组的方式来定义
如何去定义数组:
declare -i 定义整数
declare -a 定义数组
declare -A 定义嵌套的数组【不常用】
[python 和 shell]
array=(值)
空数组:array=()
给数组赋值:
1.array[0]=1
(在计算机语言中,索引一般从0开始计算)
(索引不一定是数字:key-value Array[崔广炘] = 1.73m)
(sehll中数组可以跳跃赋值)
2.array=(/var/log/*.log)
做遍历
array=(a b c d)
3.array=('a=187' 'b=189')
4.通过read命令来赋值
read -t 延迟 -p “说明” -a 输入所需的变量值
read -a a b c d
如何调用数组:
${变量名}
${数组名[索引]}定义的是那个索引,就看到的是那个索引对应的值
${数组名}默认调用,索引=0的值
${数组名[*]}调用数组内所有的值
统计/var/log/*.log中索引为偶数的文件的行数的和:
a=(/var/log//*.log)
for i in {1..7};do
if [ $[$i%2] -eq 0 ];then
line=`wc -l ${a[$i]} | cut -d" " -f1`
sum+=$line
fi
done
echo $sum
1、调用数组的数组长度
length("变量")
${#变量名[*]} 或者 ${#变量名[@]}
2、添加数组值的特殊方式
${变量名[${#变量名[@]}]}="值"
关于数组的其他操作:
数组切片
${变量名[@]:偏移量:取出的个数}
${a[*}:2:4}
不加取出的个数,就是切到尾部
删除值
unset${a[2]}
删除的是索引所对应的值,不是索引
练习:
生成10个随机数,打印其中的最大值
declare -a a
declare -i max=0
for i in `seq 0 9`;do
ran=$RANDOM
a[$i]=$ran
[ $ran -gt $max ] && max=$ran
done
echo ${a[@]}
echo $max
生成十个数,进行排序
a=()
b=()
c=0
for i in `seq 0 9`;do
a[$i]=$RANDOM
if [ ${a[]$i} -gt $c ];then
c=$
done
字符串:
print 格式化输出
练习:
2.
#!/bin/bash # Author: 埃希123 # Blog: https://www.cnblogs.com/lyali/ # Time: 2019-08-10 07:32:39 # Name: kuwenjian.sh # Version: v1.0 # Description: This is a Script. a=() read -p "请输入你需要复制的命令:" Command if [ -z $Command ];then echo "eg.cat" else C=`which $Command | tail -1` a=`ldd $C | grep -o "/lib64/.*[[:space:]]"` for i in `seq 0 $[${#a[*]}-1]`;do /bin/cp $C /adc/bin/ /bin/cp ${a[$i]} /adc/lib64/ done fi
3.