本文所选的例子来自于《Advanced Bash-scripting Gudie》一书,译者 杨春敏 黄毅

 #!/bin/bash
  #求两个整数的最大公约数

  E_BADARGS=

  #如果参数个数不为2,以参数错误退出
   ]
  then
      echo "Usage: `basename $0` first-number second-number"
      exit $E_BADARGS
  fi

  #如果参数非整数或参数值为0,以参数错误退出
  for i in $@
  do
      -]+ ]                                         #"=~"后面表示要跟正则表达式,+在正则表达式中表示前面的内容至少匹配一次
      then
          ]
         then
             echo "Usage: `basename $0` parameter can't be zero"
             exit $E_BADARGS
         fi
      else
             echo "Usage: `basename $0` parameter must be integer"
         exit $E_BADARGS
       fi
  done

  #设计一个gcd()函数,利用辗转相除法(欧几里德算法)求最大公约数
  gcd()
  {
      remainder=
      dividend=$
      divisor=$

       ]
      do
          let "remainder=$dividend % $divisor"
          dividend=$divisor
          divisor=$remainder
      done
  }

  gcd $ $

  echo "gcd of $1 and $2 is: $devidend"

  exit 

在改编这个脚本的时候,我的考虑点主要有以下:

1. 所传的参数是不是要排除非整数的情况?

非整数的情况第一次我用echo $i | sed '/s/^[0-9]*$/''/g' && echo $?来排除,如果第一条命令正确执行,$?应该返回0,但是我们有更好的方法,即“=~"后面跟正则的方式

2. 参数值为0的情况是不是要排除在外?

在判断$i为整数的判断下再嵌套一个判断[ $i -eq 0 ]

3. 参数个数怎么控制?

[ $# -eq 2 ]或[ $# -ne 2 ]就可以排除空参数或参数个数不为2

4. 欧几里德算法中对于$1<$2的情况的处理?

先看$1>$2的情况

$1=65 $2=15

第一个循环:5=65 % 15

      dividend=15

      divisor=5

第二次循环 0=15%5

      dividend=5

      divisor=0

退出循环,gcd=$dividend=5

再看$1<$2的情况

$1=15 $2=65

第一次循环:15=15 % 65

      dividend=65

      divisor=15

第二次循环:5=65 % 15

      dividend=15

      divisor=5

第三次循环:0=15 % 5

      dividend=5

      divisor=0

退出循环,gcd=$dividend=5

可知$1<$2的情况比$1>$2的情况多了一个循环,结果是一样的

《Advanced Bash-scripting Guide》学习(十九):两个整数的最大公约数的更多相关文章

  1. c 求两个整数的最大公约数和最小公倍数

    //求最大公约数是用辗转相除法,最小公倍数是根据公式 m,n 的 最大公约数* m,n最小公倍数 = m*n 来计算 #include<stdio.h> //将两个整数升序排列 void ...

  2. 求两个整数的最大公约数GCM

    思路分析: (1)求差判定法:  如果两个数相差不大,可以用大数减去小数,所得的差与小数的最大公约数就是原来两个数的最大公约数.例如:求78和60的最大公约数.78-60=18,18和60的最大公约数 ...

  3. php取两个整数的最大公约数算法大全

    php计算两个整数的最大公约数常用算法 <?php//计时,返回秒function microtime_float (){ list( $usec , $sec ) = explode ( &q ...

  4. 强化学习(十九) AlphaGo Zero强化学习原理

    在强化学习(十八) 基于模拟的搜索与蒙特卡罗树搜索(MCTS)中,我们讨论了MCTS的原理和在棋类中的基本应用.这里我们在前一节MCTS的基础上,讨论下DeepMind的AlphaGo Zero强化学 ...

  5. 【C语言】写一个函数,并调用该函数求两个整数的最大公约数和最小公倍数

    程序分析: 在数学中,两个数的最小公倍数=两个数的乘积/两数的最大公约数. 求两个数的最大公约数,运用辗转相除法:已知两个整数M和N,假定M>N,则求M%N. 如果余数为0,则N即为所求:如果余 ...

  6. Scala学习十九——解析

    一.本章要点 文法定义中的二选一.拼接.选项和重复在Scala组合子解析器中对应|.~.opt和rep 对于RegexParsers而言,字符串字面量和正则表达式匹配的是词法单元 用^^来处理解析结果 ...

  7. Spring学习(十九)----- Spring的五种事务配置详解

    前段时间对Spring的事务配置做了比较深入的研究,在此之间对Spring的事务配置虽说也配置过,但是一直没有一个清楚的认识.通过这次的学习发觉Spring的事务配置只要把思路理清,还是比较好掌握的. ...

  8. Python3.5 学习十九 Django分模块讲解 MTV+URL

    本节内容概述: 表单提交的Method使用规则:get 获取数据 post提交数据 单选使用get 多选使用getlist request.POST.getlist("favor" ...

  9. Spring学习(十九)----- Spring与WEB容器整合

    首先可以肯定的是,加载顺序与它们在 web.xml 文件中的先后顺序无关.即不会因为 filter 写在 listener 的前面而会先加载 filter.最终得出的结论是:listener -> ...

随机推荐

  1. TimeStamp 毫秒和纳秒

    毫秒 /** * Returns the time represented by this Timestamp object, as a long value * containing the num ...

  2. MySQL版本与工具

    MySQL各个版本区别 MySQL 的官网下载地址:http://www.mysql.com/downloads/ 在这个下载界面会有几个版本的选择. 1. MySQL Community Serve ...

  3. Python3.6全栈开发实例[019]

    19.干掉主播.现有如下主播收益信息, 按照要求, 完成相应操作:(1)计算主播平均收益值 sum = 0 for i in zhubo.values(): sum +=i print(round(s ...

  4. exist & in

    select a.* from A a where exists ( select 1 from B b where a.id=b.id ) public List exist(){ List res ...

  5. 目标是:互联网方向的Java开发工程师

    我们需要这样完美的你: --师出名门:应届统招本科及以上学历,计算机相关专业: --技艺超群:熟悉JAVA面向对象编程, J2EE体系结构,熟悉Struts2.Spring.Ibtais.Memcac ...

  6. 安装和使用jupyter

    安装 pip install jupyter 使用 jupyter notebook

  7. python之网络socket编程

    一.网络协议 客户端/服务器架构 1.硬件C/S架构(打印机) 2.软件C/S架构(互联网中处处是C/S架构):B/S架构也是C/S架构的一种,B/S是浏览器/服务器 C/S架构与socket的关系: ...

  8. PL/SQL不能格式化SQL:--PL/SQL Beautifier could not parse text

    PL/SQL sql语句美化器点击没有反应.查看下面提示PL/SQL Beautifier could not parse text.本人此次产生的原因是sql语句语法错误. 工具栏处(如果没有此按钮 ...

  9. 【HackerRank】 Filling Jars

    Animesh has N empty candy jars, numbered from 1 to N, with infinite capacity. He performs M operatio ...

  10. PCIE phy和控制器

    转:https://wenku.baidu.com/view/a13bc1c20722192e4436f617.html 文章中的第11页开始有划分phy和控制器部分....