美文网首页
课后练习之for循环练习

课后练习之for循环练习

作者: 还没帮马里奥再闯一关 | 来源:发表于2021-01-10 14:24 被阅读0次

    编写脚本,提示输入正整数n的值,计算1+2+…..+n的综合

    read -p "请输入一个整数:" num
    expr $num + 1 &>/dev/null || (echo "这不是一个整数";exit 10)  
    sum=0
    for i in `seq 1 $num`; do
        let sum+=i
    done
    echo sum=$sum
    
    本题重点:如果判断一个整数?这里就要用到expr命令,详解如下
    可以使用expr命令+1从而判断返回的$?的值
    expr命令一般用于整数值,但也可用于字符串。一般格式为:
    expr argument operator argument
    #expr也是一个手工命令行计数器。
    $expr 10 + 10
    20
    $expr 1500 + 900
    2500
    $expr 30 / 3
    10
    $expr 30 / 3 / 2
    5
    (注意运算符左右都有空格)
    使用乘号时,必须用反斜线屏蔽其特定含义。因为shell可能会误解显示星号的意义。
    $expr 30 * 3
    90
    
    #判断一个数字是不是整数,可以利用下命的例子
    $num=1.1
    expr $num+1
    expr:non-numeric argument
    echo $?
    1
    
    $num=1
    expr $num+1
    2
    echo $?
    0
    
    (注意:这个例子与原文不同)
    这里需要将一个值赋予变量(不管其内容如何),进行数值运算,并将输出导入dev/null,
    然后测试最后命令状态,如果为0,证明这是一个数,其他则表明为非数值。
    $VALUE=12
    expr $VALUE + 10 > /dev/null 2>&1
    $echo $?
    0
    这是一个数字
    
    $VALUE=hello
    expr $VALUE + 10 > /dev/null 2>&1
    $echo $?
    2
    这是一个非数值字符。
    
    增量计数
    expr在循环中用于增量计算。首先,循环初始化为0,然后循环值加1,反引号的用法意
    即替代命令。最基本的一种是从(expr)命令接受输出并将之放入循环变量。
    $LOOP=0
    $LOOP=`expr $LOOP + 1`
    
    参考:https://blog.csdn.net/qq_40003309/article/details/107282392 【shell中判断是否是整数】
    

    计算100以内所有能被3整除的整数之和

    #/bin/bash
    declare -i sum=0
    for (( n=1; n<100; n++ ));do
      if let n%3==0;then
      sum+=$n
      fi
    done
    echo $sum
    

    编写脚本,提示请输入网络地址,如192.168.0.0,判断输入的网段中主机在线状态

    #!/bin/bash
    set -ue
    
    read -p "please input ipaddrs: " net 
    [[ $net =~ ^(([1-9]?[0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([1-9]?[0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$ ]] || (echo "This is not a correct IP address";exit 10) #判断左边的字符串是否和右边的字符串相等,等同于判断了IP地址是否合法
    net1=`echo "$net" | egrep -o "^([0-9]+\.){3}"`
    for id in {1..254} ;do
        {
        ping -c1 -w1 $net1$id &>/dev/null && echo "$net1$id is up " || echo "$net1$id is down"
        }&
    done
    wait
    

    打印九九乘法表

    #/bin/bash
    for i in {1..9};do
        for j in `seq $i`;do
            echo -e "${j}x${i}=$[i*j]\t\c"
        done
        echo
    done
    
    ⏱ 14:23:42-root:/date/sh# bash 9--9.bak 
    1x1=1
    1x2=2   2x2=4
    1x3=3   2x3=6   3x3=9
    1x4=4   2x4=8   3x4=12  4x4=16
    1x5=5   2x5=10  3x5=15  4x5=20  5x5=25
    1x6=6   2x6=12  3x6=18  4x6=24  5x6=30  6x6=36
    1x7=7   2x7=14  3x7=21  4x7=28  5x7=35  6x7=42  7x7=49
    1x8=8   2x8=16  3x8=24  4x8=32  5x8=40  6x8=48  7x8=56  8x8=64
    1x9=9   2x9=18  3x9=27  4x9=36  5x9=45  6x9=54  7x9=63  8x9=72  9x9=81
    

    在/testdir目录下创建10个html文件,文件名格式为数字N(从1到10)加随机8个字母,如:1AbCdeFgH.html

    for num in {1..10};do
      letters=$(head -c 38 /dev/urandom | base64 | tr -dc '[[:alpha:]]' | head -c8
      touch /data/$num$letters.html
    done
    

    打印等腰三角形

    #/bin/bash
    read -p "请输入三角形的行数: " line
    for((i=1;i<=line;i++));do
        for((k=0;k<=line-i;k++));do
            echo -e ' \c'
        done
        for((j=1;j<=2*i-1;j++));do
            echo -e '*\c'
        done
        echo
    done
    [root@centos8 scripts]#bash for_triangle.sh
    请输入三角形的行数: 10
             *
             ***
           *****
           *******
         *********
         ***********
       *************
       ***************
     *****************
     *******************
    

    打印等腰三角形(^[0-9]+$必须是数字开头和数字结尾)

    read -p "Please input the triangle's height(rows):" height
    if ! { echo $height | grep -E '^[0-9]+$' &> /dev/null; };then   
      echo "check your input, and try angain."
      exit
    fi
    for (( i=1; i<=$height; i++ )) ;do
      for (( j=$height-$i; j>0; j-- ));do
        echo -n ' '
      done
      for (( k=1;k<2*$i; k++ ));do
        echo -n '*'
      done
      echo
    done
    

    相关文章

      网友评论

          本文标题:课后练习之for循环练习

          本文链接:https://www.haomeiwen.com/subject/ioikaktx.html