• shell_数组与字符串


    回顾

       函数:写一个代码块,用来重复调用的;

    1. 函数的写法格式

    2. 参数,在函数名后面直接加,即可;如果在外面传参是不行的

    3. 变量

    local本地变量

    local i=1

       如果在函数体外同样定义了一个相同的变量

       扩展:source /bash /chmod+x 全路径

    4. return

    结束函数体执行

    和exit的区别

       return和exit都指定的返回值 0代表执行成功,1-255代表执行失败

       return只用在函数体中;

    5. 迭代

    迭代的时候一定要指初始值

    斐波那契数列

    数组与字符串

    1. 数组

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

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

      1) 数组名

      2) 索引

      3) 值

    如何去定义数组:

      declare -i 定义整数(声明)

      declare -a 定义数组array

      declare -A 定义嵌套的数组【这样的数组值在bash中并不常用】

      array=(值)

      array=()空数组

    如何给数组赋值:

      array=()

      1. array[0]=ly  (在计算机语言中,索引一般从零开始计算;索引并不一定是数字:key-      value;shell中数组赋值可以跳跃(跳跃赋值) )

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

        array=(a b c d…)

      3. array=(‘李媛=174’‘韩忠达=160’…)

      4. 通过read命令来赋值

        read  -t 延迟

        -p “指定说明”

        -a 输入数组所需要的变量值

        read -a a b c d e f

    如何去调用数组:

      ${变量名}

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

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

      ${数组名[*]}或者${数组名[@]}

        调用数组内所有的值$* $@[尽量使用@]

    特殊用法:

      调用数组的数组长度

        length(“变量”)

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

      添加数组值得特殊方式

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

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

    关于数组的其他操作

      数组切片

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

        a=(/var/log/*.log)

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

      删除值

        unset 变量名[索引]

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

      修改值

        a[3]=c

        a[3]=d 覆盖即修改

    练习:

    统计/var/log/*.log中索引为偶数的文件的行数的和

       declare -a 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”

    练习:

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

      

    字符串:

       printf   占位符:%s %d %f

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

       %-[num]s 代表左对齐

    1. 字符串切片

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

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

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

    2. 基于模式取子字符串

    从左到右

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

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

    从右到左

      ${变量名%pattern}

      ${变量名%%pattern}

    思考:取url中的IP地址或域名

    3. 字符替换

      ${变量名/pattern/替换后的字符串}【patter并不是正则表达式】

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

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

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

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

        指定匹配行首必须为pattern,才去替换

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

         指定匹配行尾必须为pattern,才去替换

    注意:/分隔符,不能替换为其他特殊符号

    4. 查找并删除

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

      ${变量名/pattern/ }

      ${变量名//pattern/ }

      ${变量名/#pattern/ }

      ${变量名/%pattern/ }

    5. 替换大小写

      tr替换大小写

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

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

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

    6. 变量赋值

      a)变量名1=${变量名2:-word}

        注意没有空格  输入默认值得作用,变量2没有值,就将word默认值赋值给变量1

      b)变量名1=${变量名2:+word}

        不常用 变量2 有值得情况下,才将word默认值赋值给变量1

      c)${变量:=word}

        如果变量没有值,就将word赋值给变量,有值,则使用原来的值

      d)变量1=${变量2:?error_info}

        如果变量2没有值,输出error_info错误信息

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

      filename 1

      vim filename 1

           a=1

           b=2

      :wq

      vim filename1.sh

           ./全路径/filename 后者

        source /全路径/filename【执行整个代码】

           c=$[$a+$b]

           echo $c

      :wq

    bash filename1.sh

    练习:

    8. 两个命令

    install

      复制或删除文件,用法同copy;优点可以指定权限来复制文件

      用法:

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

        -t 源目对换

        -d 创建目录

        -m MODE

        -o OWNER

        -g GROUP

    mktemp

      创建临时文件以及目录

      避免大家取的文件名重复;mktemp 名字. XXXX

      XXXX代表随机数(字母和数字)

      默认创建的是随机的文件

      -d 创建的是随机的目录

      file=`mktemp a.XXXX`

  • 相关阅读:
    C++运算符优先级
    UNREFERENCED_PARAMETER
    Eclipse无法查看源码 提示source not found
    JAVAWEB dbutils执行sql命令并遍历结果集时不能查到内容的原因
    JAVAWEB和数据库 Mysql连接不上的原因及解决方案
    电子设备 Kindle如何删除书籍或漫画
    JAVA StringUtils需要导入的包
    JAVAWEB servlet和jsp的权限访问控制
    JAVAWEB servlet验证登录时进行完全的非空判断防止空值登录
    JAVAWEB 遍历mysql结果集时 字段为0、false、null的问题
  • 原文地址:https://www.cnblogs.com/TheNeverLemon/p/11384475.html
Copyright © 2020-2023  润新知