shell数组与字符串
?? 数组 数组说白了就是一段连续的变量,一段连续的内存存储空间 解决变量过多的问题,在同一类变量中,我们不需要去定义多个名字,而是以数组的方式来定义 如何去定义数组: 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. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |