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

 

posted on 2019-08-21 20:56  茶l  阅读(123)  评论(0编辑  收藏  举报