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 格式化输出

  shell数组与字符串

练习:

shell数组与字符串

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.