8.20 数组与字符

数组与字符串

数组
    数组说白了就是一段连续的变量,一段连续的内存存储空间
    解决:变量过多的问题;在同一类变量中,我们不需要去定义多个名字,而是以数组的方式来定义;(列表)
  1、数组名
  2、索引
  3、值
  如何去定义数组:
    declare -i 定义整数(声明)
    declare -a 定义数组
    declare -A 定义数嵌套

  如何给数组赋值:
    array=()
    1、array[0]=刘源 (在计算机语言中,索引一般从0开始计算)
    (索引并不一定是数字:key-value array[刘源]=1.80m)
    (shell中数组赋值,可以跳跃(跳跃赋值))
    2、array=(var/log/*.log)
    做遍历
    array=(a b c d e)
    3、array=('刘源'='180' ' '=' '...)
    4、通过read命令来赋值
    read -t 延迟 -p “指定说明” -a 输入数组所需的变量值
    read -a a b c d e
    如何去调用数组:
    ${变量名}
    ${数组名[索引]} 定义的是哪个索引,看的是对应索引指定的值
    ${数组名} 默认调用索引=0的值
    ${数组名[*]}或者${数组名[@]} 调用数组内所有的值 $* $@

  1、调用数组的数组长度
    length("变量")
    $[#变量名[*]]或者$[#变量名[@]]
  2、添加数组值的特殊方式:
    ${变量名[#变量名[@]]}="值"或者${变量名[#变量名[*]]}

  关于数组的其他操作
    数组切片
    ${变量名[@]:偏移量:所需要取出值的个数}
    ${a[*]:2:4}
    删除值
    unset ${变量名[索引]}
    注意:删除的是索引所对应的的值,索引没有删除
    【知道值,如何查看索引】

字符串
  printf
  python (%s)%
  占位符
  %s
  %d
  %f

  %[num]s 指定该字符占位的宽度
  %-[num]s 代表左对齐

  1、字符串切片
    $[变量名:偏移量:数值个数]
    $[变量名: -数值个数] 注意:冒号后面一定要加空格
    $[变量名: -word] 默认赋值
    read "sasas:"test
    [ -z test ] && test=abc
  2、基于模式取子字符串
    从左至右
    ${变量名#pattern} 删除pattern第一次匹配到的字串
    ${变量名##pattern} 删除所有pattern匹配到的字串

    从右至左
    ${变量名%pattern}
    ${变量名%%pattern}

    思考:取url中IP(域名)  

  3、字符替换   

    ${变量名/pattern/替换后的字符串} 【pattern并不是正则表达式,而是文件通配符】
    匹配第一个pattern,来进行替换
    ${变量名//pattern/替换后的字符串}
    匹配所有哦pattern,并进行替换
    ${变量名/#pattern/替换后的字符串}
    指定匹配行首必须是 pattern ,才会替换
    ${变量名/%pattern/替换后的字符串}
    指定匹配行尾必须是 pattern , 才会替换

    注意: / 分隔符,不能替换为(# % 等特殊字符 ,和sed 不一样)

  4、查找并删除

    替换中,不指定替换字符串,即为删除
    ${变量名/pattern}
    ${变量名//pattern}
    ${变量名/#pattern}
    ${变量名/%pattern}

  5、替换大小写
    tr 替换大小写
    tr[[:lower:]][[:upper:]]

    ${变量名^^}将字符串全部替换为大写
    ${变量名,,}将字符串全部替换为小写

  6、变量赋值
    变量名1=${变量名2:-word} 注意没有空格!输入默认值的作用,变量名2没有值,就将word默认值赋值给变量1
    变量名1=${变量名2:+word} 变量2有值的情况下才将word默认值赋值给变量1
    ${变量:=word} 如果变量没有值,就将word赋值给变量,有值,则使用原来的值


  7、脚本引用其他文件中的变量如何实现
    filename1
    vim filename1
    a=1
    b=2
    :wq
    vim filename1.sh
    ./全路径/filename或者source /全路径/filename
    c=$[$a+$b]
    echo $c
    :wq

    bash filename1.sh
  8、两个命令
    mktemp 创建临时文件以及目录 temp - - /tmp
    为了避免大家取得文件名重复;mktemp 名字.XXXXXX (代表随机数(子母和数字))
    默认创建的是随机的文件
    -d 创建的是随机的目录

    file=`mktemp a.XXXX`

    install 复制或删除文件,用法同copy
    优点:可以指定权限来复制文件
    用法:
    install a文件 b目录 //复制a文件到b目录并恢复初始权限
    -t 源目地址对换
    -d 创建目录
    -m MODE
    -o OWNER
    -g GROUP

posted @ 2019-08-21 08:48  酒友az  阅读(159)  评论(0编辑  收藏  举报