Shell脚本 - 编程进阶09

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
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值