zoukankan      html  css  js  c++  java
  • 数组与字符串

    数组

    数组说白了就是一段连续的变量,一段连续的内存存储空间

    解决:变量过多的问题; 在同一类变量中,我们不需要去定义多个名字,而是以数组的方式来定义;(列表)

    共好学院云三本[1]=xx

    1、数组名

    2、索引

    3、值

    如何去定义数组:

    declare -i 定义整数 (申明)

    declare -a 定义数组array

    declare -A 定义嵌套的数组

    共好学院云[1]=云计算专业

    云计算专业[1]=云三班

    云三班[1]=xx

    【这样数组值,在bash中并不常用】

    python shell

    array=()

    array=()

    如何给数组赋值:

    array=()

    1array[8]=xx    (在计算机语言中,索引一般从0开始计算)

    (索引并不一定是数字 : key-value  array[xx]=1.87m)

    (shell中数组赋值,可以跳跃(跳跃赋值))

    2array=(/var/log/*.log)

    做遍历

          array=(a b c d e)

    3array=('xx=187' 'xxx=186' ... )

    4、通过read命令来赋值

    read -t 延迟 -p "指定说明" -a 输入数组所需的变量值

    read -a a b c d e

    如何去调用数组:

    ${变量名}

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

    ${数组名}  默认调用 索引=0 的值  $array(最好不要这样写)

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

    1、调用数组的数组长度

    length("变量")

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

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

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

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

    关于数组的其他操作

    数组切片

    ${变量名[@]:偏移量:所需要取出值的个数}

    echo ${a[*]:2:4}

    ${变量名[@]:偏移量}

    删除值

    unset ${变量名[索引]}

    注意:删除是索引所对的值,而没有带着索引一块删除;

    【知道值,如何查看索引?】

    修改值

    a[3]=c

    a[3]=d 覆盖即修改

    练习:

    生成10个随机数,打印其中最大的数值

    declare -a a
    
    declare -i max=0
    
     
    
    for i in `seq 0 9`;do
    
     a[$i]=$RANDOM
    
    [ ${a[$i]} -gt $max ] && max=${a[$i]}
    
    done
    
    echo ${a[@]}
    
    echo "最大值为:$max"

    字符串:

    printf  

    name=xx

    hiagth=183

    python  ( %s ,他的身高为 %d ) % (name, hiaght)

    输出: xx,他的身高为183

    %s

    %d

    %f

    %[num]s  指定该字符串占位的宽度

    %-[num]s  代表左对齐

    【居中对齐】

    =============================

    1、字符串切片:

    数组切片:${变量名[@]:偏移量:数值个数}

    字符串:${变量名:偏移量:数值个数}

                 ${变量名: -数值个数} *注意:冒号后面一定要加空格*

                  ${变量名:-word}   默认赋值的意思

    read "sasasa:" test

    [ -z $test ] && test=abc

    2、基于模式取子字符串

    从左自右

    ${变量名#pattern}   删除pattern第一次匹配到的字串

    ${变量名##pattern}  删除所有pattern匹配到的字串

    从右自左

    ${变量名%pattern}

    ${变量名%%pattern}

    3、字符替换

    ${变量名/pattern/替换后的字符串} pattern并不是正则表达式,而是文件通配符】

    匹配第一个pattern,来进行替换

    ${变量名//pattern/替换后的字符串}

    匹配所有哦pattern,并进行替换

    ${变量名/#pattern/替换后的字符串}

    指定匹配行首必须是 pattern ,才会替换

    ${变量名/%pattern/替换后的字符串}

    指定匹配行尾必须是 pattern , 才会替换

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

    4、查找并删除

    替换中,不指定替换字符串,即为删除

    ${变量名/pattern}

    ${变量名//pattern}

    ${变量名/#pattern}

    ${变量名/%pattern}

    5、替换大小写

    tr  替换大小写

    tr [[:lower:]] [[:upper:]] < filename

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

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

    6、变量赋值

    变量名1=${变量名2:-word}  注意没有空格!   输入默认值的作用 , 变量2 没有值,就将 word 默认值赋值给 变量1

    变量名1=${变量名2:+word}  不常用   变量2 有值的情况下,才将 word默认值赋值给变量1

    ${变量:=word}   如果变量没有值,就将word赋值给变量,有值,则使用原来的值  

    变量1=${变量2:?error_infor}  如果变量2 没有值,输出erro_infor错误信息

    7、脚本应用其他文件中的变量,如何实现?

    filename1

    vim filename1

    a=1

    b=2

    :wq

    vim filename1.sh

    . /全路径/filename  后者  source /全路径/filename //执行整个代码

    c=$[$a+$b]

    ehco $c

    :wq

    bash filename1.sh

    练习:修改hostname,定义一个 hostname文件 name=xxx hostname.sh

    hostname
    
    name=test.com
    
     
    
    hostname.sh
    
    if [ -r /root/hostname ];then
    
    . /root/hostname
    
    else
    
    echo "/root/hostname 没有执行权限"
    
    exit 1
    
    fi
    
     
    
    hostname $name

    8、两个命令

    mktemp  创建临时文件以及目录  temp -- /tmp

    避免大家取的文件名字重复;mktemp 名字.XXXXXX (XX代表随机数(字母和数字))

    默认创建是随机的文件

    -d  创建的就是随机的 目录

    file=`mktemp a.XXXX`

    install   复制或删除文件,用法同copy

    优点可以指定权限来复制文件

    用法:intall a文件 b目录     //复制a文件到b目录,并回复初始权限(文件:755 目录:644

              -t   源目对换

              -d  创建

              -m MODE

               -o OWNER

              -g GROUP

  • 相关阅读:
    jsonp 请求和回传实现
    序列化实现原型模式
    java基础30问
    模板方法模式
    开发思维导图
    策略模式
    使用vue-router设置每个页面的title
    node.js解决中文乱码问题
    Vue-cli proxyTable代理 解决开发环境的跨域问题
    Vue缓存需要被缓存的页面
  • 原文地址:https://www.cnblogs.com/bishuyu/p/11398076.html
Copyright © 2011-2022 走看看