zoukankan      html  css  js  c++  java
  • shell-数组

    [root@localhost ~]# echo $(seq 1 10)            #取出1至10内的整数。
    1 2 3 4 5 6 7 8 9 10
    [root@localhost ~]# c=$(echo 5.12*2+0.876 |bc)    #bc命令计算浮点数。
    [root@localhost ~]# echo $c
    11.116

    浮点数计算

    [root@localhost ~]# a=1.23
    [root@localhost ~]# b=3.13
    [root@localhost ~]# c=$(echo $a+$b |bc)
    [root@localhost ~]# echo $c
    4.36
    [root@localhost ~]# cat for-seq.sh 
    #!/bin/bash
            for i in $(seq 1 10)
            do
                            echo $i
            done
    [root@localhost ~]# bash for-seq.sh 
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10

    数组

    [root@localhost ~]# declare -a abc     定义一个数组
    [root@localhost ~]# abc[0]=1
    [root@localhost ~]# abc[1]=2
    [root@localhost ~]# echo ${abc[*]}
    1 2    
    [root@localhost ~]# unset abc[1]
    [root@localhost ~]# unset abc[0]
    [root@localhost ~]# abc=(1 2 3 4 5 6)  #这里必须是小括号,各值之间用空格分隔。
    [root@localhost ~]# echo ${abc[*]}
    1 2 3 4 5 6

    [root@localhost ~]# echo ${abc[@]}
    1 2 3 4 5 6

    [root@localhost ~]# a="0 9 8 7"
    [root@localhost ~]# echo ${a[*]}
    0 9 8 7
    [root@localhost ~]# abc=($a)
    [root@localhost ~]# echo ${abc[@]}
    0 9 8 7
    [root@localhost ~]# echo ${abc[0]}
    0
    [root@localhost ~]# echo ${abc[1]}
    9
    [root@localhost ~]# echo ${abc[2]}
    8
    [root@localhost ~]# echo ${abc[3]}
    7
    [root@localhost ~]# echo ${abc[4]}
    
    [root@localhost ~]# 

    我们某些命令的结果所得到的变量,某些命令执行后所得到的变量,比如awk从一个命令的结果里截取指定列是有很多数字的,把所有的数值截取出来会赋予一个变量,这个变量里的所有值当做一个整体给了这个变量。
    这个时候调用这个变量会调用出一个整体来的,这些值不好去处。我可以把这个变量放到小括号里。然后把这个小括号里的所有的值赋予数组变量。

    [root@localhost ~]# a=$(ps aux |awk 'NR>1 {print $3}')
    [root@localhost ~]# echo $a
    0.1 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.1 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.2 0.0 0.0 0.0 0.1 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.1 0.0 0.0 0.0 0.0 0.0
    [root@localhost ~]# abc=($a)
    [root@localhost ~]# echo ${abc[*]}
    0.1 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.1 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.2 0.0 0.0 0.0 0.1 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.1 0.0 0.0 0.0 0.0 0.0
    [root@localhost ~]# declare -p abc
    declare -a abc='([0]="0.1" [1]="0.0" [2]="0.0" [3]="0.0" [4]="0.0" [5]="0.0" [6]="0.0" [7]="0.0" [8]="0.0" [9]="0.0" [10]="0.0" [11]="0.0" [12]="0.0" [13]="0.0" [14]="0.0" [15]="0.0" [16]="0.0" [17]="0.0" [18]="0.0" [19]="0.0" [20]="0.0" [21]="0.0" [22]="0.0" [23]="0.0" [24]="0.1" [25]="0.0" [26]="0.0" [27]="0.0" [28]="0.0" [29]="0.0" [30]="0.0" [31]="0.0" [32]="0.0" [33]="0.0" [34]="0.0" [35]="0.0" [36]="0.0" [37]="0.0" [38]="0.0" [39]="0.0" [40]="0.0" [41]="0.0" [42]="0.0" [43]="0.0" [44]="0.0" [45]="0.0" [46]="0.0" [47]="0.0" [48]="0.0" [49]="0.0" [50]="0.0" [51]="0.0" [52]="0.0" [53]="0.0" [54]="0.0" [55]="0.0" [56]="0.0" [57]="0.0" [58]="0.0" [59]="0.0" [60]="0.0" [61]="0.0" [62]="0.0" [63]="0.0" [64]="0.0" [65]="0.0" [66]="0.0" [67]="0.0" [68]="0.0" [69]="0.0" [70]="0.0" [71]="0.2" [72]="0.0" [73]="0.0" [74]="0.0" [75]="0.1" [76]="0.0" [77]="0.0" [78]="0.0" [79]="0.0" [80]="0.0" [81]="0.0" [82]="0.0" [83]="0.0" [84]="0.0" [85]="0.1" [86]="0.0" [87]="0.0" [88]="0.0" [89]="0.0" [90]="0.0")'

    cpu占用率累加。

    [root@localhost ~]# cat CPUsum.sh 
    #/bin/bash
    
                    a=$(ps aux |awk 'NR>1 {print $3}')   大于第一行,打印第三列。
                    abc=($a)                  把变量a的值赋给abc变量。
    
                    y=$(echo ${#abc[*]})          ${#abc[*]}计算出数组的个数。
    
                    sum=0        
                    for i in ${abc[@]}            
                    do
                                                    sum=$(printf %.2f $(echo $sum+$i |bc))
    
                    done
                    echo $sum
    [root@localhost ~]# bash CPUsum.sh 
    0.60

    数组变量和位置参数变量
    $* ${abc[*]} 当${abc[*]}加上双引号时,会将所有值作为一个整体输出,(不加双引号时与@作用一样)
    $@ ${abc[@]} #这两组是一样的。

    调用数组所有值,
            echo ${abc[*]}
            echo ${abc[@]}
        数组长度获取。
            数组长度(元素数=值的个数)
                ${abc[*]}
            元素长度
                echo ${abc[1]} |wc -L
                echo -n ${abc[1]} |wc -L #去掉换行符后再统计。
    数组遍历
            abc=(1 2 3 4 5 6)
            a=0
            for i in ${abc[$a]}                #a就是一个下标值。从0开始。
            do
                echo $i
                let a++
            done
    数组元素修改。
            [root@localhost ~]# abc=(1 2 3 4 5)
            [root@localhost ~]# abc[3]=10
            [root@localhost ~]# echo ${abc[*]}
            1 2 3 10 5
            [root@localhost ~]# bcd=(${abc[*]} 9)            #其实就是变量叠加
            [root@localhost ~]# echo ${bcd[*]}
            1 2 3 10 5 9
    数组切片。
            [root@localhost ~]# abc=(1 2 3 4 5 6 7 8 9 10)
            [root@localhost ~]# echo ${abc[*]}
            1 2 3 4 5 6 7 8 9 10
            [root@localhost ~]# echo ${abc[*]:1}            #从下标为1的位置开始取值。第一个冒号后面那个数字表示从哪个下标值开始取值。
            2 3 4 5 6 7 8 9 10    
            [root@localhost ~]# echo ${abc[*]::3}            #从下标为0的位置开始连续取3个值。
            1 2 3
            [root@localhost ~]# echo ${abc[*]:0:3}
            1 2 3
            [root@localhost ~]# echo ${abc[*]:2:3}            #从下标为2的位置开始连续取3个值。
            3 4 5
            [root@localhost ~]# echo ${abc[*]:(-2):3}        #不够3个数值了,只能取出两个数值。
            9 10
    
            [root@localhost shell]# abc=(1 2 3 4 5)
            [root@localhost shell]# def=(${abc[*]:(-2):2})
            [root@localhost shell]# echo ${def[*]}
            4 5
    元素切片
            [root@localhost shell]# name=(liujunjun lishi zhangsan)
            [root@localhost shell]# echo ${name[0]}
            liujunjun
    
            [root@localhost shell]# echo ${name[0]:1}       #从第一个元素下标值为1的位置开始到最后。
            iujunjun
            [root@localhost shell]# echo ${name[0]::3}        从第一个元素下标值为1的位置开始取3个字符。    
            liu
            [root@localhost shell]# echo ${name[0]:2:3}
            uju
            [root@localhost shell]# echo ${name[0]:(-2):2}
            un
    数组元素替换。
            [root@localhost shell]# num=(one two three four five)        #只替换每一个元素的第一个e为E
            [root@localhost shell]# echo ${num[@]/e/E}
            onE two thrEe four fivE
            [root@localhost shell]# echo ${num[@]//e/E}                    #全部替换
            onE two thrEE four fivE
            
            [root@localhost shell]# echo ${num[@]/e/}                    #删除
            on two thre four fiv
            [root@localhost shell]# echo ${num[@]//e/}
            on two thr four fiv
    
            [root@localhost shell]# echo ${num[0]/#o/O}                    #把第0个下标值的第一个小写o,替换成大写O
            One
            [root@localhost shell]# echo ${num[0]/%e/U}                    #把第0个下标值的最后一个小e,替换成大字U。
            onU
    [root@localhost ~]# vi sz3.sh
    #!/bin/bash
                    a=`echo 2018-04-28 12:15:30_ABC.log |awk -F "." '{print $1}' |sed -r 's/[-:_]/ /g' |tr -d [a-zA-Z]`
                    abc=($a)
                    for i in ${abc[*]}
                    do
                                    echo $i
                    done
    [root@localhost ~]# bash sz3.sh 
    2018
    04
    28
    12
    15
    30

    利用数组求最大值。

    [root@localhost ~]# vi sz4.sh
    #!/bin/bash
    
                    a=(34 78 3 95 62 59 100)
    
                    max=${a[0]}
                    len=${#a[@]}
    
    
                    for ((i=1;i<=$len;i++))
                    do
                                    if [[ "${a[$i]}" -gt "$max" ]]
                                    then
                                                    max=${a[$i]}
                                    fi
    
                    done
                    echo "数组中最大的值是$max."
    ~
    [root@localhost ~]# bash sz4.sh 
    数组中最大的值是100.

    字符串反转输出

    [root@localhost ~]# a=$(seq 1 9)
    [root@localhost ~]# echo $a
    1 2 3 4 5 6 7 8 9
    [root@localhost ~]# echo $a|rev
    9 8 7 6 5 4 3 2 1
    [root@localhost ~]# vi 99.sh 
    #!/bin/bash
    
            for i in $(seq 9)
            do
                            for j in $(seq 9)
                            do
                                             [ $j -le $i ] && echo -n "$j*$i=$(($i*$j)) "
                            done
                            echo
            done
    [root@localhost ~]# bash 99.sh 
    1*1=1 
    1*2=2 2*2=4 
    1*3=3 2*3=6 3*3=9 
    1*4=4 2*4=8 3*4=12 4*4=16 
    1*5=5 2*5=10 3*5=15 4*5=20 5*5=25 
    1*6=6 2*6=12 3*6=18 4*6=24 5*6=30 6*6=36 
    1*7=7 2*7=14 3*7=21 4*7=28 5*7=35 6*7=42 7*7=49 
    1*8=8 2*8=16 3*8=24 4*8=32 5*8=40 6*8=48 7*8=56 8*8=64 
    1*9=9 2*9=18 3*9=27 4*9=36 5*9=45 6*9=54 7*9=63 8*9=72 9*9=81 
  • 相关阅读:
    Python排列函数:sort、sorted
    Python高阶函数:map、reduece、filter
    Python:容器、迭代对象、迭代器、生成器及yield关键字
    JPA-映射-(@OneToOne)双向一对一
    JPA-映射-(@OneToMany、@ManyToOne)双向一对多
    JPA-映射-(@OneToMany)单向一对多
    JPA-映射-(@ManyToOne)单向多对一
    JPA-EntityManager.merge()
    JPA-API
    leetcode 2.Add Two Numbers
  • 原文地址:https://www.cnblogs.com/liujunjun/p/12203163.html
Copyright © 2011-2022 走看看