• shell数组与字符串


    一、数组

    1、 是一段连续的变量,一段连续的内存存储空间

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

      (1) 数组值

      (2) 索引

      (3) 值

    3、 如何定义数组:

      (1)declare -i 定义整数(申明)

      (2)declare -a 定义数组array

      (3)declare -A 定义数组嵌套

          a[1]=b

          b[1]=c

          c[1]=d

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

    4、 如何给数组赋值

    array=()

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

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

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

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

      做遍历

            array=(a b c d e)

    3、 array=(‘zz=187’ ‘aaa=186’)

    4、 通过read命令来赋值

    (1)read -t 延迟 -p “指定说明”  -a 输入数组所需的变量值

    (2)read -a a b c d e

    5、 如何去调用数组:

    $[变量名]

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

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

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

    (1)调用数组的数组长度

        length(“变量”)

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

    (2)添加数组值的特殊方式

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

    (3)关于数组的其他操作

        数组切片

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

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

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

        删除值

            unset ${变量名[索引]}

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

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

        修改值

          A[3]=c

          A[3]=d 覆盖即修改

     二、字符串

    1、 字符串切片:

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

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

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

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

    2、 基于模式取子字符串

    (1)从左到右

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

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

    (2)从右向左

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

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

    3、 字符替换

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

              匹配第一个pattern,来进行替换  【pattern并不是正则表达式,而是文件通配符】

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

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

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

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

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

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

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

    4、 查找并删除

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

      ${变量名/pattern}

      ${变量名//pattern}

      ${变量名/#pattern}

      ${变量名/%pattern}

    5、 替换大小写

    (1)tr 替换大小写

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

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

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

    6、 变量赋值

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

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

    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
    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
    9、练习:
    (1)获取此命令所依赖的所有库文件的列表
    (2)复制命令至某目标目录(例如/mnt/sysroot)下的对应路径下
    (3)复制此命令所依赖的所有库文件至目标目录下的对应路径下/lib64/ld-linux-x86-64.so.2  /mnt/sysroot/lib64/ld-linux-x86-64.so.2每次复制完成一个命令后,不要退出,而是提示用户输入新的复制的命令,并重复完成上述功能,直到用户输入quit退出;

  • 相关阅读:
    spring mvc ajax请求
    spring mvc 返回页面数据
    spring mvc 参数传递的三种方式
    spring mvc 注解示例
    spring mvc handler的三种方式
    MyBatis 一级、二级缓存
    MyBatis 调用存储过程
    MyBatis动态SQL与模糊查询
    spring mvc 注解入门示例
    MyBatis 一对多关联查询
  • 原文地址:https://www.cnblogs.com/www-k/p/11381564.html
Copyright © 2020-2023  润新知