• shell脚本8-20


    数组

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

    2、数组的写法:数组名[索引]=值

    3、数组赋值:

    (1)在计算机语言中,索引一般从0开始计算,索引并不一定是数字也可以是key-value(键值对),如:array[小明]=1.87m

    (2)array=(/var/log/*.log),可以用来做遍历

    (3)直接赋值:array=(a b c d e)

    (4)通过键值赋值:array=('小明=187''张三=185' '李四=176')

    (5)通过read命令赋值:read -t 延迟时间 -p “指定说明” -a 输入数组所需的变量值  例: read -a a b c d e

    4、调用数组:普通变量:${变量名}

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

            ${数组名}【默认调用索引等于0的值】

            ${数组名[*]}或者${数组名[@]}(调用数组内所有的值,建议使用@)

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

    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

    5、调用数组长度:length(“变量”)、${#变量名[*]}或者${#变量名[@]}

    6、添加数组值的特殊方式:${变量名[${#变量名[@]}]}="值"或者 ${变量名[${#变量名[*]}]}="值"

    7、关于数组的其他操作:

    (1)数组切片:${变量名[@]:偏移量:所需要取出值的个数}

              例:${a[@]:2:4}(从数组a的第二个索引开始取值,取四个)

    (2)删除值:unset ${变量名[索引]} 【注意:删除是索引所对的值,而没有带着索引一块删除;】

    (3)修改值:例:a=c a=d  【覆盖即修改】

    练习:生成十个随机数,然后并进行排序。

    declare -i a=0
    for i in `seq 0 9`;do
            a=$RANDOM
            echo $a
    done >/root/a.txt
    b=`sort -n /root/a.txt`
    echo $b

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

    eclare -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"

    字符串

    1、printf命令:用来做格式化输出

    2、格式化输出占位符:%d(整型)、%s(字符串型)、%f(浮点型)

    %[num]s:指定该字符串占位的宽度,默认为右对齐,左对齐时为%[-num]s

    3、字符串切片:${变量名:偏移量:所需要取出值的个数}

            ${变量名:  -所需取出的值的个数}

             【注意冒号后面要加一个空格,冒号后面不加空格时为${变量名:-word},表示默认赋值的意思】

             

    4、基于模式取子字符串

    (1)【从左自右删除】

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

    (2)【从右自左删除】 

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

     

    5、字符替换:${变量名/pattern/替换后的字符串} (匹配第一个pattern,来进行替换)【pattern并不是正则表达式,而是文件通配符】

            

          ${变量名//pattern/替换后的字符串}  匹配所有pattern,并进行替换

          ${变量名/#pattern/替换后的字符串}指定匹配行首必须是 pattern ,才会替换
          ${变量名/%pattern/替换后的字符串}指定匹配行尾必须是 pattern , 才会替换

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

    6、替换大小写:${变量名^^}【将字符串小写全部替换为大写】

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

    7、变量赋值:${变量名:-word}【赋值时冒号后面不能有空格,有空格是切片】

             ${变量名:+word}【不常用,在变量有值的情况下,才将Word默认值赋给变量】

           变量1=${变量2:=word}【变量2有值时,将变量2的值赋给变量1;否则,将word赋值给变量1】

           变量1=${变量2:?error_infor}【当变量2没有值时,输出error_infor】

    练习:修改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、两个变量

    (1)mktemp:创建临时文件以及目录 temp -- /tmp

             避免取的文件名字重复;mktemp 名字.XXXXXX (XX代表随机数(字母和数字))
             默认创建是随机的文件
             -d 创建的就是随机的 目录

             file=`mktemp a.XXXX`

    (2)install:复制或删除文件,用法同copy

           优点可以指定权限来复制文件
           用法:intall a文件 b目录 //复制a文件到b目录,并回复初始权限(文件:755 目录:644)
           -t 源目对换
           -d 创建
           -m MODE
           -o OWNER
           -g GROUP

    9、系统的启动原理

    读取系统--读取磁盘:前提就是必须先加载磁盘的驱动程序
    挂载 虚拟根(img虚根文件ramdisk)
    虚根文件文件挂上以后,在grub1.5加载磁盘驱动;
    通过chroot将ramdisk上面的临时“根”切换到磁盘上面

  • 相关阅读:
    函数的参数设置
    定义函数
    使用dict和set
    (转)set集合的应用
    循环与range
    if语句
    How to use git hub
    Install pyodbc in OpenSUSE
    Ubuntu编译安装PHP7
    Ubuntu为已经安装的PHP7单独编译mysqli
  • 原文地址:https://www.cnblogs.com/cqyyyyy/p/11398142.html
Copyright © 2020-2023  润新知