zoukankan      html  css  js  c++  java
  • Linux--shell数组和字符串--09

    一、数组

    数组就是一段连续的变量,一段连续的内存存储空间,为了解决变量过多的问题,在同一类变量中,我们不需要去定义多个名字,而是以数组的方式来定义

    1、定义数组

    declare -a         定义数组
    declare -A         定义嵌套的数组 --- 这个在bash中并不常用
    testname=(value)   也可以定义一个空数组

    2、数组赋值

    shell中是可以跳跃赋值的

    testname=( )

      a) testname[0]=1  ----索引一般从0开始,但索引并不一定是数字;

      b) testname=(/var/log/*.log)  把/var/log下以.log结尾的放入数组

      c) testname=(“qq=123” “vx=456”…)

      d) 通过read命令赋值:read -a 输入数组所需的变量值

        read -a x y z …

    3、调用数组

    ${变量名}

    ${数组名[索引]} 定义的是哪个索引,就看到是对应索引指定的值

    ${数组名} 默认调用索引=0的值

    ${数组名[*]} 或者 ${数组名[@]}  调用数组内所有的值

    4、练习:统计/var/log/*.log匹配到的所有文件索引为偶数文件的行数的和。

    a=(/var/log/*.log)
    declare -i sum=0
    for i in `seq 0 7`;do
        if [ $[$i%2] -eq 0];then
            line=wc -l ${a[$i]} |cut -d’ ‘ -f1
            sum += $line
        fi
    done
    echo $sum    

    5、调用数组的长度

    ${#变量名[*]} 或者 ${#变量名[@]}

    6、添加数组值的特殊方式

    ${变量名[${#变量名[@]}]}=”值” 或 ${变量名[${#变量名[*]}]}=”值”

    7、数组切片

    ${变量名[@]:偏移量:取值个数} ${a[*]:2:4} 不加取值个数就是取到最后

    8、删除值

    unset ${变量名[索引]} 删除的是该索引数的值,其他值索引不变

    9、修改值

    覆盖就是修改

    二、字符串

    1、格式化输出:printf

    printf "%-5s %-5s %-5s" No Name Height
    printf "%-5s %-5s %-5d" 1 zhangsan 167
    printf "%-5s %-5s %-5.1f" 1 zhangsan 170.5
        %-5d  左对齐

    2、字符串切片

    ${变量名:偏移量:数值个数}  a=abcdefg  ${a:2:4} ===cdef
    ${变量名:  -数值个数}  从后往前取  冒号后面一定要有空格
    ${变量名:-word} 默认赋值,如果变量没有赋值,就使用默认值

    3、基于模式取子字符串

    ${变量名#patten} a=abcdABCabABCD ${a#a*C}===adABCD 从开头匹配删除最短匹配的子串
    ${变量名##pattern} a=abcdABCabABCD ${a##a*C}===D  从开头匹配删除最长匹配的子串
    ${变量名%pattern} a=abcdABCabABC ${a%a*C}===abcdABC 从结尾匹配删除最短匹配的子串
    ${变量名%%pattern} a=abcdABCabABC ${a%a*C}===空  从结尾匹配删除最长匹配的子串

    4、字符替换

    ${变量名/pattern/替换的字符串} 匹配第一个pattern进行替换
        a=192.168.1.1  ${a/192/72}=72.168.1.1
    ${变量名//pattern/替换的字符串} 匹配所有pattern进行替换
    ${变量名/#pattern/替换的字符串} pattern必须出现在行首,不然不替换
    ${变量名/%pattern/替换的字符串} pattern必须出现在结尾,不然不替换
        注意:/分隔符不能换成(# % 等特殊字符)

    5、查找并删除:替换中不指定替换的字符串,即为删除

    ${变量名/pattern}
    ${变量名//pattern}
    ${变量名/#pattern}
    ${变量名/%pattern}

    6、替换大小写

    tr [:lower:] [:upper:] < filename 小写转大写
    ${变量名^^} 把小写转换为小写
    ${变量名,,} 把大写转换为小写

    7、变量赋值

    变量名1=${变量名2:-word} 当变量2没有值时,赋予变量1默认word值
    变量名1=${变量名2:+word} 当变量2有值时,赋予变量1默认word值
    ${变量名:=word} 变量没有值的时用word默认值,有值则用原来的值
    变量名1=${变量名2:?error_info} 变量2没有值时,输出error_info

     8、脚本应用其他文件中的变量

    vim /root/filename1
        a=1
        b=2
    :wq
    
    vim /root/filename2.sh
        ./root/filename1   #导入filename1文件
        c=$[$a+$b]
        echo $c
    :wq

    9、两个命令

    mktemp:创建临时文件以及目录,避免取的文件名重复
      格式:mktemp 名字.XXXX   XX代表随机数(字母和数字)
    默认创建的是文件
      -d  创建名字随机的目录
    例如:file=`mktemp a.XXX`   dir=`mktemp -d b.XXX`             
    install:复制或删除文件,用法和copy相同
        优点是可以指定权限来复制文件
    用法:
        install [option] 文件 目录  复制时恢复初始权限
        install [option] 目录 文件
    参数:
        -t 源目对换
        -d 创建
        -m MODE  设置权限 mask
        -o OWNER  指定所属主
        -g GROUP  指定所属组
  • 相关阅读:
    一个故事讲透供应链的三大战略
    电商系统之订单正向与逆向流程设计
    广告深度预估技术在美团到店场景下的突破与畅想
    美团智能客服核心技术与实践
    供应链里的批次管理,你了解多少
    对于HTML语义化的理解
    前端三大框架中Vue与React区别
    对于mvc模式的理解与学习
    对于javascript里面闭包的理解
    webpack的理解与使用
  • 原文地址:https://www.cnblogs.com/gxnihao/p/11392277.html
Copyright © 2011-2022 走看看