zoukankan      html  css  js  c++  java
  • shell编程

    shell编程基础练习

    1、使用for循环在/tmp目录下生成10个文件

      要求:

        (1)每个文件要以.html结尾的

        (2)每个文件名的长度必须是固定字符串,且长度为10个字符

        (3)10个字符必须是小写的26个字母,且每个字母必须是随机生成的

      解题: 

    [root@oldboy ~]# vim randc.sh 
    #!/bin/bash
    declare  -a  char=("a" "b" "c" "d" "e" "f" "g" "h" "i" "j" "k" "l" "m" "n" "o" "p" "q" "r" "s" "t" "u" "v" "w" "x" "y" "z")
    declare  -i num=10
    function generator(){
    
            local n=10
            local string
            local ele
            for ((i=0;i<n;i++));do
                    ele=${char[$[$RANDOM%26]]}
                    string=$(echo "$ele$string")
            done
            echo $string
    }
    function main(){
    
            local n=10
            for((i=0;i<n;i++));do
                    str=$(generator)
                    if [ $? -eq 0 ];then
                            touch "${str}.html"
                    fi
            done
    }
    main
    View Code

    2、随机生成10个整数,使用冒泡排序法进行排序

      解题:

    #!/bin/bash
    declare  -a  arr
    for ((i=0;i<10;i++));do
      let arr[$i]=$RANDOM
    done
    for ((i=0;i<${#arr[*]};i++));do
      echo ${arr[$i]}
    done
    echo "-----------------------------"
    function change(){
        local temp=0
        temp=${arr[$1]}
        let arr[$1]=${arr[$2]}
        let arr[$2]=$temp
    }
    function sort(){
      for((i=0;i<$[${#arr[*]}-1];i++));do
        for((j=0;j<$[${#arr[*]}-$i-1];j++));do
          if [ ${arr[$j]} -gt ${arr[$[$j+1]]} ];then
              change $j  $[$j+1]
          fi
        done
      done
    }
    sort
    for ((i=0;i<${#arr[*]};i++));do
      echo ${arr[$i]}
    done

    运行结果
      [root@oldboy ~]# bash sort.sh
      1409
      26330
      13163
      23802
      17282
      15310
      31993
      28608
      23552
      10180
      -----------------------------
      1409
      10180
      13163
      15310
      17282
      23552
      23802
      26330
      28608
      31993

      

    3、对 3, 1, 8, 4, 2 ,9, 6,使用插入排序法进行排序

       解答:

    [root@oldboy ~]# vim insertSort.sh
    #!/bin/bash
    
    declare -a arr=(3 1 8 4 2 9 6)
    for((i=0;i<$[${#arr[*]}-1];i++));do
            echo "${arr[$i]}"
    done
    echo "-------------------------"
    function insertSort(){
            for ((i=1;i<$[${#arr[*]}-1];i++));do
                    local preIndex=$[$i-1]
                    local current=${arr[$i]}
                    while [ $preIndex -ge 0 -a ${arr[$preIndex]} -gt $current ];do
                            let arr[$[$preIndex+1]]=arr[$preIndex]
                            let preIndex--
                    done
                    let  arr[$[$preIndex+1]]=$current
            done
    }
    insertSort
    for((i=0;i<$[${#arr[*]}-1];i++));do
            echo "${arr[$i]}"
    done

    运行结果
      

    [root@oldboy ~]# bash insertSort.sh
    3
    1
    8
    4
    2
    9
    -------------------------
    1
    2
    3
    4
    8
    9

     4、随机生成10个随机数,使用选择排序法进行排序

      解答:  

    [root@oldboy ~]# vim choseSort.sh
    #!/bin/bash
    
    declare -a arr
    
    for ((i=0;i<10;i++));do
    
            let arr[$i]=$RANDOM
    done
    
    for ((i=0;i<${#arr[*]};i++));do
    
            echo ${arr[$i]}
    done
    
    echo "-------------------------"
    
    function change(){
    
    
            local temp=0
    
            let temp=arr[$1]
    
            let arr[$1]=arr[$2]
    
            let arr[$2]=$temp
    
    }
    
    function choseSort(){
    
            for((i=0;i<${#arr[*]};i++));do
    
                    for((j=$[$i+1];j<${#arr[*]};j++));do
    
                            if [ ${arr[$i]} -gt ${arr[$j]} ];then
    
                                    change $i $j
    
                            fi
                    done
            done
    
    }
    
    choseSort
    
    for ((i=0;i<${#arr[*]};i++));do
    
            echo ${arr[$i]}
    done
    
    [root@oldboy ~]# bash  choseSort.sh
    30933
    31066
    15774
    21855
    20877
    1454
    31761
    19611
    32409
    6421
    -------------------------
    1454
    6421
    15774
    19611
    20877
    21855
    30933
    31066
    31761
    32409

    5、判断一个字符串是否是回文

      解答:

    echo "aabcbaa" | gawk -v  FS='' 'BENGIN{declare -a arr}{  #将一个字符串存入数组,再一个一个判断
        i=0;
        while(i<NF){
        i++;
        arr[i-1]=$i
        }
    }
        END{
            flag=0;
            len=int(length(arr)/2);  #gawk关于整数除以一个不能整除的数之后的值是一个小数,使用gawk内置函数int()转换了一下
            for(i=0;i<length(arr)-1;i++){
                if(i==len){
                    break
                };
                if(arr[i]!=arr[length(arr)-1-i]){
                    flag=1;
                    break
                }
            };
        if(flag==0){
            print "yes"
        }else{
            print "no"
        }
    }'
                                                                

      注意:上述代码使用gawk实现的,并不是bash脚本实现。同时把代码格式化了一下,验证的时候注意遵守gawk语法!

    未完待续........

    注:这些题是在网上查找,经略微改编发布,如有侵犯,立即删除

  • 相关阅读:
    网络层-数据平面:路由器工作原理
    文件系统和目录:目录
    文件系统与目录:文件系统
    运输层-可靠数据传输原理:选择重传 Selective Repeat Protocol
    运输层-可靠数据传输原理:回退N步 Go-Back_N Protocol
    JAVA学习笔记之多态
    约瑟夫环的递归解法C
    题目:汉诺塔问题
    题目:在同一坐标中输出sinx和cosx两条曲线
    n!的溢出问题及处理
  • 原文地址:https://www.cnblogs.com/lanxiansen/p/10595530.html
Copyright © 2011-2022 走看看