SciRui 2020-01-16
[ ~]# echo $(seq 1 10) #取出1至10内的整数。 1 2 3 4 5 6 7 8 9 10 [ ~]# c=$(echo 5.12*2+0.876 |bc) #bc命令计算浮点数。 [ ~]# echo $c 11.116
浮点数计算
[ ~]# a=1.23 [ ~]# b=3.13 [ ~]# c=$(echo $a+$b |bc) [ ~]# echo $c 4.36
[ ~]# cat for-seq.sh
#!/bin/bash
for i in $(seq 1 10)
do
echo $i
done
[ ~]# bash for-seq.sh
1
2
3
4
5
6
7
8
9
10数组
[ ~]# declare -a abc 定义一个数组
[ ~]# abc[0]=1
[ ~]# abc[1]=2
[ ~]# echo ${abc[*]}
1 2[ ~]# unset abc[1]
[ ~]# unset abc[0]
[ ~]# abc=(1 2 3 4 5 6) #这里必须是小括号,各值之间用空格分隔。
[ ~]# echo ${abc[*]}
1 2 3 4 5 6
[ ~]# echo ${abc[@]}1 2 3 4 5 6
[ ~]# a="0 9 8 7"
[ ~]# echo ${a[*]}
0 9 8 7[ ~]# abc=($a)
[ ~]# echo ${abc[@]}
0 9 8 7[ ~]# echo ${abc[0]}
0
[ ~]# echo ${abc[1]}
9
[ ~]# echo ${abc[2]}
8
[ ~]# echo ${abc[3]}
7
[ ~]# echo ${abc[4]}
[ ~]#我们某些命令的结果所得到的变量,某些命令执行后所得到的变量,比如awk从一个命令的结果里截取指定列是有很多数字的,把所有的数值截取出来会赋予一个变量,这个变量里的所有值当做一个整体给了这个变量。
这个时候调用这个变量会调用出一个整体来的,这些值不好去处。我可以把这个变量放到小括号里。然后把这个小括号里的所有的值赋予数组变量。
[ ~]# a=$(ps aux |awk ‘NR>1 {print $3}‘)
[ ~]# 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[ ~]# abc=($a)
[ ~]# 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[ ~]# 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占用率累加。
[ ~]# 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[ ~]# 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数组元素修改。
[ ~]# abc=(1 2 3 4 5)
[ ~]# abc[3]=10
[ ~]# echo ${abc[*]}
1 2 3 10 5
[ ~]# bcd=(${abc[*]} 9) #其实就是变量叠加
[ ~]# echo ${bcd[*]}
1 2 3 10 5 9数组切片。
[ ~]# abc=(1 2 3 4 5 6 7 8 9 10)
[ ~]# echo ${abc[*]}
1 2 3 4 5 6 7 8 9 10
[ ~]# echo ${abc[*]:1} #从下标为1的位置开始取值。第一个冒号后面那个数字表示从哪个下标值开始取值。
2 3 4 5 6 7 8 9 10
[ ~]# echo ${abc[*]::3} #从下标为0的位置开始连续取3个值。
1 2 3
[ ~]# echo ${abc[*]:0:3}
1 2 3
[ ~]# echo ${abc[*]:2:3} #从下标为2的位置开始连续取3个值。
3 4 5
[ ~]# echo ${abc[*]:(-2):3} #不够3个数值了,只能取出两个数值。
9 10
[ shell]# abc=(1 2 3 4 5)
[ shell]# def=(${abc[*]:(-2):2})
[ shell]# echo ${def[*]}
4 5元素切片
[ shell]# name=(liujunjun lishi zhangsan)
[ shell]# echo ${name[0]}
liujunjun
[ shell]# echo ${name[0]:1} #从第一个元素下标值为1的位置开始到最后。
iujunjun
[ shell]# echo ${name[0]::3} 从第一个元素下标值为1的位置开始取3个字符。
liu
[ shell]# echo ${name[0]:2:3}
uju
[ shell]# echo ${name[0]:(-2):2}
un数组元素替换。
[ shell]# num=(one two three four five) #只替换每一个元素的第一个e为E
[ shell]# echo ${num[@]/e/E}
onE two thrEe four fivE
[ shell]# echo ${num[@]//e/E} #全部替换
onE two thrEE four fivE
[ shell]# echo ${num[@]/e/} #删除
on two thre four fiv
[ shell]# echo ${num[@]//e/}
on two thr four fiv
[ shell]# echo ${num[0]/#o/O} #把第0个下标值的第一个小写o,替换成大写O
One
[ shell]# echo ${num[0]/%e/U} #把第0个下标值的最后一个小e,替换成大字U。
onU[ ~]# 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
[ ~]# bash sz3.sh
2018
04
28
12
15
30利用数组求最大值。
[ ~]# 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."
~
[ ~]# bash sz4.sh
数组中最大的值是100.字符串反转输出
[ ~]# a=$(seq 1 9) [ ~]# echo $a 1 2 3 4 5 6 7 8 9 [ ~]# echo $a|rev 9 8 7 6 5 4 3 2 1
[ ~]# 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
[ ~]# 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