1、输入若干个数值存入数组中,采用冒泡算法进行升序或降序排序;
- 升序脚本
#!/bin/bash
while :
do
declare -a NUMS
read -p "请输入一个数字( e 结束输入,q 退出程序 ):" N
if [ $N == "q" ];then
break
elif [ $N == "e" ];then
L=${#NUMS[*]}
if [ $L == 0 ];then
echo 没有数字。
elif [ $L == 1 ];then
echo 只有一个数字,无需排序。
else
for i in `seq $[L-1]`;do
for j in `seq $i $[L-1]`;do
MIN=${NUMS[$i-1]}
if [ $MIN -gt ${NUMS[$j]} ];then
NUMS[$i-1]=${NUMS[$j]}
NUMS[$j]=$MIN
fi
done
done
echo 从小到大排序:${NUMS[*]}
break
fi
elif [[ $N =~ ^[0-9]+$ ]];then
NUMS[$i]=$N
echo 已输入数字:${NUMS[*]}
echo 个数: ${#NUMS[*]}
let i++
else
echo "您输入的不是数字,请重新输入。"
continue
fi
done
- 升级执行结果
[root@centos7 ~]# ./sort.sh
请输入一个数字( e 结束输入,q 退出程序 ):2334
已输入数字:2334
个数: 1
请输入一个数字( e 结束输入,q 退出程序 ):5434
已输入数字:2334 5434
个数: 2
请输入一个数字( e 结束输入,q 退出程序 ):23
已输入数字:2334 5434 23
个数: 3
请输入一个数字( e 结束输入,q 退出程序 ):55
已输入数字:2334 5434 23 55
个数: 4
请输入一个数字( e 结束输入,q 退出程序 ):22
已输入数字:2334 5434 23 55 22
个数: 5
请输入一个数字( e 结束输入,q 退出程序 ):e
从小到大排序:22 23 55 2334 5434
- 降序脚本
#!/bin/bash
while :
do
declare -a NUMS
read -p "请输入一个数字( e 结束输入,q 退出程序 ):" N
if [ $N == "q" ];then
break
elif [ $N == "e" ];then
L=${#NUMS[*]}
if [ $L == 0 ];then
echo 没有数字。
elif [ $L == 1 ];then
echo 只有一个数字,无需排序。
else
for i in `seq $[L-1]`;do
for j in `seq $i $[L-1]`;do
MAX=${NUMS[$i-1]}
if [ $MAX -lt ${NUMS[$j]} ];then
NUMS[$i-1]=${NUMS[$j]}
NUMS[$j]=$MAX
fi
done
done
echo 从大到小排序:${NUMS[*]}
break
fi
elif [[ $N =~ ^[0-9]+$ ]];then
NUMS[$i]=$N
echo 已输入数字:${NUMS[*]}
echo 个数: ${#NUMS[*]}
let i++
else
echo "您输入的不是数字,请重新输入。"
continue
fi
done
- 降序执行结果
[root@centos7 ~]# ./sort-r.sh
请输入一个数字( e 结束输入,q 退出程序 ):5444
已输入数字:5444
个数: 1
请输入一个数字( e 结束输入,q 退出程序 ):556
已输入数字:5444 556
个数: 2
请输入一个数字( e 结束输入,q 退出程序 ):22
已输入数字:5444 556 22
个数: 3
请输入一个数字( e 结束输入,q 退出程序 ):334
已输入数字:5444 556 22 334
个数: 4
请输入一个数字( e 结束输入,q 退出程序 ):6661
已输入数字:5444 556 22 334 6661
个数: 5
请输入一个数字( e 结束输入,q 退出程序 ):e
从大到小排序:6661 5444 556 334 22
2、将下图所示,实现转置矩阵 matrix.sh;
1 2 3 1 4 7
4 5 6 ===> 2 5 8
7 8 9 3 6 9
- 脚本
#!/bin/bash
declare -a matrix
echo 原始:
for i in `seq 3`
do
for j in `seq 3`
do
matrix[$i$j]=$[3*(i-1)+j]
echo -n ${matrix[$i$j]} ''
done
echo
done
echo -e "\n转换:"
for i in `seq 3`
do
for j in `seq $i`
do
x=${matrix[$i$j]}
matrix[$i$j]=${matrix[$j$i]}
matrix[$j$i]=$x
done
done
for i in `seq 3`
do
for j in `seq 3`
do
echo -n ${matrix[$i$j]} ''
done
echo
done
- 执行结果
[root@centos7 ~]# ./matrix.sh
原始:
1 2 3
4 5 6
7 8 9
转换:
1 4 7
2 5 8
3 6 9
3、打印杨辉三角形。
- 脚本
#!/bin/bash
declare -a YH
for i in `seq 10`
do
for j in `seq $i`
do
if [ $j -eq 1 -o $j -eq $i ]
then
YH[$i$j]=1
echo -n ${YH[$i$j]} ''
else
L=${YH[$[i-1]$[j-1]]}
R=${YH[$[i-1]$j]}
YH[$i$j]=$[L+R]
echo -n ${YH[$i$j]} ''
fi
done
echo
done
- 执行结果
[root@centos7 ~]# ./yanghui.sh
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
1 6 15 20 15 6 1
1 7 21 35 35 21 7 1
1 8 28 56 70 56 28 8 1
1 9 36 84 126 126 84 36 9 1