代码我就不做说明了,都是些基础的 数组 和 for,if语句的使用。 下面直接看demo。
定义固定数组,然后求该数组的最大值
[root@controller-test ccx]# cat 1.sh #!/bin/bash array=(1 666 3 5 7 22 33 666 12 18 20 66) max=${array[0]} for (( i=0; i<${#array[*]-1}; i++ )) ; do if [ ${array[$i]} -gt $max ] ; then max=${array[$i]} if [ ${array[$i]} -eq $max ] ; then sum=(${array[$i]}) else continue fi else continue fi done #echo max:$max for a in $sum ; do echo max=$a done [root@controller-test ccx]# sh 1.sh max=666 [root@controller-test ccx]#数组可以让用户输入,代码和方式1一样,只是多了个read而已
[root@controller-test ccx]# cat a.sh #!/bin/bash #array=(1 666 3 5 7 22 33 666 12 18 20 66) echo -n 'read num :' read -a array max=${array[0]} for (( i=0; i<${#array[*]-1}; i++ )) ; do if [ ${array[$i]} -gt $max ] ; then max=${array[$i]} if [ ${array[$i]} -eq $max ] ; then sum=(${array[$i]}) else continue fi else continue fi done #echo max:$max for a in $sum ; do echo max=$a done [root@controller-test ccx]# sh a.sh read num :2 44 231 65 3 2 66 4 666 max=666 [root@controller-test ccx]#显示一串数组中的若干最大值和及其下标位置,必须用for循环遍历,否则只能显示一个最大值!
这和方式一是不同的遍历方式,感兴趣的可以自行尝试!
这种方式有点复杂,容易混淆,思路就是先求出最小值,然后重新定义一个初始变量,求次最小值,然后加一个if判断 等于最小值的时候就直接跳过。最后分别遍历求出该下标即可。
[root@controller-test ccx]# cat 5.sh #!/bin/bash array=(18 13 13 6 23 21 32 12 19 23) #定义第一个值 min=${array[0]} # 求出最小值 for (( i=0; i<${#array[*]-1}; i++ )) ; do if [ ${array[$i]} -lt $min ] ; then min=${array[$i]} else continue fi done echo min:$min #重新定义第一个值 min2=${array[0]} #依然是求出最小值 for ((i=0; i<${#array[*]-1}; i++ )) ; do if [ ${array[$i]} -lt $min2 ] ; then #如果等于之前求出的最小值,就跳过 if [ ${array[$i]} -eq $min ] ; then continue else min2=${array[$i]} fi fi done echo min2=$min2 # 找出最小值的下标 for ((i=1; i<${#array[*]} ; i++)) ; do if [ ${array[$i]} -eq $min ] ; then echo 最小值下标及最小值:array[$i] = $min fi done #找出次小值的下标 for ((i=1; i<${#array[*]} ; i++)) ; do if [ ${array[$i]} -eq $min2 ] ; then echo 次小值下标及最小值:array[$i] = $min2 fi done [root@controller-test ccx]# sh 5.sh min:6 min2=12 最小值下标及最小值:array[3] = 6 次小值下标及最小值:array[7] = 12 [root@controller-test ccx]#用sort的方式实现,这种比较简单