设为首页 收藏本站
查看: 995|回复: 0

shell整理(30)====嵌套循环shell写找勾股数和shift命令

[复制链接]

尚未签到

发表于 2018-8-25 06:36:42 | 显示全部楼层 |阅读模式
  (一)题目:找出100 以内的勾股数
  shell 代码如下:
  
#!/bin/bash  

  
for i in `seq 100`
  
do
  
        for j in `seq $i 100`        #这样就解决了重复的问题
  
        do                    例如 3 4 5  和 4 3 5
  
                for x in `seq $j  100`
  
                do
  
                a=$((i*i))
  
                b=$((j*j))
  
                c=$((x*x))
  
                d=$(($a+$b))
  
                if [[  $d = $c ]]
  
                then
  
                        echo $i $j $x
  
                fi
  
                done
  
        done
  
done
  输出如下:
  [root@localhost ding]#
  [root@localhost ding]# bash 6.sh   #有没有发现输出结果第二列都比第一列数字大
  3 4 5
  5 12 13
  6 8 10
  7 24 25
  8 15 17
  9 12 15
  9 40 41
  10 24 26
  11 60 61
  ...............
  利用上面这个原理我们可以打印一个九九乘法表
  shell 代码如下:
#!/bin/bash  

  
for i in `seq 9`
  
do
  
        for j in `seq $i `      #这地方写成$i 就比写成seq 9 方便多了呢
  
        do
  
                echo -n "$i*$j=$(($i*$j)) "   #有一个空格
  
        done
  
        echo            内层循环完成以后换行
  
done
  
echo
  输出结果如下:
  [root@localhost ding]# bash 7.sh    #外层决定有多少行,内层决定有多少列
  1*1=1
  2*1=2 2*2=4
  3*1=3 3*2=6 3*3=9
  4*1=4 4*2=8 4*3=12 4*4=16
  5*1=5 5*2=10 5*3=15 5*4=20 5*5=25
  6*1=6 6*2=12 6*3=18 6*4=24 6*5=30 6*6=36
  7*1=7 7*2=14 7*3=21 7*4=28 7*5=35 7*6=42 7*7=49
  8*1=8 8*2=16 8*3=24 8*4=32 8*5=40 8*6=48 8*7=56 8*8=64
  9*1=9 9*2=18 9*3=27 9*4=36 9*5=45 9*6=54 9*7=63 9*8=72 9*9=81
  代码稍作改变,也可以变成这样:哈哈  例如
  [root@localhost ding]# bash 7.sh
  1*1=1 1*2=2 1*3=3 1*4=4 1*5=5 1*6=6 1*7=7 1*8=8 1*9=9
  2*2=4 2*3=6 2*4=8 2*5=10 2*6=12 2*7=14 2*8=16 2*9=18
  3*3=9 3*4=12 3*5=15 3*6=18 3*7=21 3*8=24 3*9=27
  4*4=16 4*5=20 4*6=24 4*7=28 4*8=32 4*9=36
  5*5=25 5*6=30 5*7=35 5*8=40 5*9=45
  6*6=36 6*7=42 6*8=48 6*9=54
  7*7=49 7*8=56 7*9=63
  8*8=64 8*9=72
  9*9=81
  代码如下:
#!/bin/bash  

  
for i in `seq 9`
  
do
  
        for j in `seq $i 9`
  
        do
  
                echo -n "$i*$j=$(($i*$j)) "
  
        done
  
        echo
  
done
  
echo
  如果你九九乘法表的原理明白了,那么打印这个也是同样的原理呢?把上面所有黄色标记都打印出来
  例如:
  [root@localhost ding]# bash 10.sh
  1
  1 2
  1 2 3
  1 2 3 4
  1 2 3 4 5
  1 2 3 4 5 6
  1 2 3 4 5 6 7
  1 2 3 4 5 6 7 8
  1 2 3 4 5 6 7 8 9
  shell  代码如下
#!/bin/bash  

  
for i in `seq 9`
  
do
  
        for j in `seq $i`        #这三个是不是很像呢
  
        do
  
                echo -n  "$j "   #有一个空格,不然全都堆在一起了
  
        done
  
        echo            #内层循环完成以后换行
  
done
  上面虽然没有什么命令,但是你必须深入了解for循环是怎么循环的才能写出来,第一个是三层嵌套循环 后两个是二层嵌套
  当i=1,里面循环1次,分别打印出来
  当i=2,里面循环2次,分别打印出来
  当i=3,里面循环3次,分别打印出来
  ..............................
  
  (二)  shift 命令的一个简单应用
  例如:
  
  【root@localhost ding]# bash 1.sh `seq 9`    #`seq 9` 可以改成${a..z} 或 ${1..9}看效果
  1 2 3 4 5 6 7 8 9     #9个数
  2 3 4 5 6 7 8 9        #8个数
  3 4 5 6 7 8 9
  4 5 6 7 8 9
  5 6 7 8 9
  6 7 8 9
  7 8 9
  8 9
  9    #一个数
  shell 代码如下:
  #!/bin/bash
  while (($# > 0))     #这地方可以用[[ $# > 0 ]] 但是不能写成[ $# -ge 0 ],因为[ ]只支持
  do            简单的比较,不支持逻辑比较
  echo $@       #这个地方写$#和$* 都可以
  shift
  done
  shift 其实就是向左移动,每循环一次,就把$1去掉,如果后面不加数字,默认去掉一个数。$2就变成$1打印出来。
  例如我们这样:
  #!/bin/bash
  echo $#
  while [[ $# > 0 ]]
  do
  echo $@
  shift 3   #没次去掉$1.$2.$3
  done
  执行结果:
  root@localhost ding]# bash  1.sh a b c d d e   #后面加的数必须能被3整除,不然报错
  6
  a b c d d e
  d d e
  [root@localhost ding]#
  在例如我们这样测试一下:
  #!/bin/bash
  echo $#
  while [[ $# > 0 ]]
  do
  echo $@
  shift 3   #决定循环多少次
  echo $1
  done
  输出:
  [root@localhost ding]# bash  1.sh a b c d d e
  6       #  $#的值
  a b c d d e  # $@的值(第一次循环)
  d        #  shift 3 以后的$1
  d d e        # $@的值 (第二次循环)



运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-556087-1-1.html 上篇帖子: shell 笔记一 下篇帖子: 获取wiki某网页信息shell即获取wiki子目录信息-shell
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表