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

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

《Advanced Bash-scripting Guide》学习(十玖):八个整数的最大公约数,bashscripting

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

 1 #!/bin/bash
 2  #求两个整数的最大公约数
 3  
 4  E_BADARGS=65
 5  
 6  #如果参数个数不为2,以参数错误退出
 7  if [ $# -ne 2 ]
 8  then
 9      echo "Usage: `basename $0` first-number second-number"
10      exit $E_BADARGS
11  fi
12 
13  #如果参数非整数或参数值为0,以参数错误退出
14  for i in [email protected]
15  do
16      if [ $i=~[0-9]+ ]                                         #"=~"后面表示要跟正则表达式,+在正则表达式中表示前面的内容至少匹配一次
17      then
18         if [ $i -eq 0 ]
19         then
20             echo "Usage: `basename $0` parameter can't be zero"
21             exit $E_BADARGS
22         fi
23      else
24             echo "Usage: `basename $0` parameter must be integer"
25         exit $E_BADARGS
26       fi
27  done
28 
29  #设计一个gcd()函数,利用辗转相除法(欧几里德算法)求最大公约数
30  gcd()
31  {
32      remainder=1
33      dividend=$1
34      divisor=$2
35  
36      until [ $remainder -eq 0 ]
37      do
38          let "remainder=$dividend % $divisor"
39          dividend=$divisor
40          divisor=$remainder
41      done
42  }
43  
44  gcd $1 $2
45  
46  echo "gcd of $1 and $2 is: $devidend"
47  
48  exit 0

在改编那一个剧本的时候,作者的思考点重要有以下:

  1. 所传的参数是还是不是要排除非整数的动静?

非整数的景色第二遍小编用echo $i | sed ‘/s/^[0-9]*$/”/g’ && echo
$?来化解,要是第②条命令正确施行,$?应该重回0,不过大家有更加好的点子,即“=~”后边跟正则的章程

  1. 参数值为0的情景是或不是要破除在外?

在认清$i为整数的判别下再嵌套叁个推断[ $i -eq 0 ]

  1. 参数个数怎么决定?

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

  1. 欧几Reade算法中对于$一<$二的处境的处理?

先看$1>$2的情况

$1=65 $2=15

先是个巡回:5=陆伍 % 一5

      dividend=15

      divisor=5

其次次巡回 0=壹伍%伍

      dividend=5

      divisor=0

剥离循环,gcd=$dividend=5

再看$1<$2的情况 

$1=15 $2=65

率先次巡回:15=15 % 65

      dividend=65

      divisor=15

其次次巡回:5=6伍 % 1伍

      dividend=15

打字与印刷倒序NxN乘法表,三个整数的最大公约数。      divisor=5

其一次巡回:0=1伍 % 5

      dividend=5

      divisor=0

剥离循环,gcd=$dividend=伍

能够$1<$二的场地比$一>$贰的地方多了贰个循环,结果是同样的

    

 

Bash-scripting
Guide》学习(十玖):八个整数的最大公约数,bashscripting
本文所选的例子来自于《Advanced Bash-scripting Gudie》壹书,
译者…

壹.执行要求:

 1 #!/bin/bash
 2  #求两个整数的最大公约数
 3  
 4  E_BADARGS=65
 5  
 6  #如果参数个数不为2,以参数错误退出
 7  if [ $# -ne 2 ]
 8  then
 9      echo "Usage: `basename $0` first-number second-number"
10      exit $E_BADARGS
11  fi
12 
13  #如果参数非整数或参数值为0,以参数错误退出
14  for i in $@
15  do
16      if [ $i=~[0-9]+ ]                                         #"=~"后面表示要跟正则表达式,+在正则表达式中表示前面的内容至少匹配一次
17      then
18         if [ $i -eq 0 ]
19         then
20             echo "Usage: `basename $0` parameter can't be zero"
21             exit $E_BADARGS
22         fi
23      else
24             echo "Usage: `basename $0` parameter must be integer"
25         exit $E_BADARGS
26       fi
27  done
28 
29  #设计一个gcd()函数,利用辗转相除法(欧几里德算法)求最大公约数
30  gcd()
31  {
32      remainder=1
33      dividend=$1
34      divisor=$2
35  
36      until [ $remainder -eq 0 ]
37      do
38          let "remainder=$dividend % $divisor"
39          dividend=$divisor
40          divisor=$remainder
41      done
42  }
43  
44  gcd $1 $2
45  
46  echo "gcd of $1 and $2 is: $devidend"
47  
48  exit 0
 1 #!/bin/bash
 2  #求两个整数的最大公约数
 3  
 4  E_BADARGS=65
 5  
 6  #如果参数个数不为2,以参数错误退出
 7  if [ $# -ne 2 ]
 8  then
 9      echo "Usage: `basename $0` first-number second-number"
10      exit $E_BADARGS
11  fi
12 
13  #如果参数非整数或参数值为0,以参数错误退出
14  for i in $@
15  do
16      if [ $i=~[0-9]+ ]                                         #"=~"后面表示要跟正则表达式,+在正则表达式中表示前面的内容至少匹配一次
17      then
18         if [ $i -eq 0 ]
19         then
20             echo "Usage: `basename $0` parameter can't be zero"
21             exit $E_BADARGS
22         fi
23      else
24             echo "Usage: `basename $0` parameter must be integer"
25         exit $E_BADARGS
26       fi
27  done
28 
29  #设计一个gcd()函数,利用辗转相除法(欧几里德算法)求最大公约数
30  gcd()
31  {
32      remainder=1
33      dividend=$1
34      divisor=$2
35  
36      until [ $remainder -eq 0 ]
37      do
38          let "remainder=$dividend % $divisor"
39          dividend=$divisor
40          divisor=$remainder
41      done
42  }
43  
44  gcd $1 $2
45  
46  echo "gcd of $1 and $2 is: $devidend"
47  
48  exit 0
  • 加以自便三个字符N(N>0),然后打印NxN的倒序乘法表。

在改编那些剧本的时候,作者的考虑点首要有以下:

在改编那一个剧本的时候,小编的设想点主要有以下:

二.化解难点:

一.
所传的参数是或不是要破除非整数的情事?

1.
所传的参数是还是不是要免除非整数的状态?

#/!bin/bash
#

非整数的情景第一次我用echo $i | sed ‘/s/^[0-9]*$/”/g’ && echo
$?来扫除,若是第二条命令正确实施,$?应该重返0,然而大家有更加好的办法,即“=~”后边跟正则的法门

非整数的事态第2遍作者用echo $i | sed ‘/s/^[0-9]*$/”/g’ && echo
$?来驱除,倘诺第2条命令准确实施,$?应该再次来到0,但是大家有越来越好的法子,即“=~”后边跟正则的主意

#define function
NxN_fun(){

2.
参数值为0的景况是否要解除在外?

二.
参数值为0的情况是否要去掉在外?

  local i=$1                    #概念1个有些变量i调控外层循环
  while [ $i -ge 1 ];do
    local j=$i                    #概念3个局部变量j调节内层循环
    while [ $j -ge 1 ];do
      echo -e -n “$i*$j=$[i*j]\t”
      let j–
    done
    echo                    #换行
    let i–
  done
}

在认清$i为整数的论断下再嵌套3个判别[ $i -eq 0 ]

在认清$i为整数的论断下再嵌套二个论断[ $i -eq 0 ]

#main
Flag=$(echo “$1” | sed ‘s/[0-9]//g’ | wc -c)        #判断脚本参数是整型依然字符

  1. 参数个数怎么调节?
  1. 参数个数怎么调整?

if [ ! $# -eq 1
];then                      #认清脚本参数个数
  echo “>_<||| 很尴尬~!!! Usage:$(basename $0) num.”
  exit 5
elif [ ! $Flag -eq 1 ];then                #Flag值不等于一则加以的台本参数为字符型

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

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

  echo “>_<||| 很尴尬~!!!
Usage:$(basename $0) num.”           #表情符号还是挺不错的

四.
欧几Reade算法中对于$1<$二的事态的管理?

四.
欧几Reade算法中对此$一<$2的情景的拍卖?

  exit 5

先看$1>$2的情况

先看$1>$2的情况

fi

$1=65 $2=15

$1=65 $2=15

澳门金沙国际,NxN_fun $1
[ $? -eq 0 ]&&echo “打印$1*$1乘法表完毕 (^_^) 嘻嘻”||echo
“函数实施错误,请检查…(b_d) 戴了副近视镜”  #函数推行成功则打印乘法表

率先个巡回:5=6伍 % 一伍

先是个巡回:5=6伍 % 1伍

三.实验结果:

      dividend=15

      dividend=15

澳门金沙国际 1

      divisor=5

      divisor=5

四.施行考虑?

其次次巡回 0=一5%五

其次次巡回 0=15%伍

 
 一.怎么判别脚本所给参数是字符照旧整型,有未有任何的法子?

      dividend=5

      dividend=5

 2.外层while循环参数能否直接给$一,能怎么改,不可能怎么?

      divisor=0

      divisor=0

伍.令人快慰的代码段是:

脱离循环,gcd=$dividend=五

剥离循环,gcd=$dividend=五

    Flag=$(echo “$1” | sed
‘s/[0-9]//g’ | wc -c)   

再看$1<$2的情况 

再看$1<$2的情况 

 

$1=15 $2=65

$1=15 $2=65

第四回巡回:15=一伍 % 65

首先次巡回:1五=15 % 65

      dividend=65

      dividend=65

      divisor=15

      divisor=15

其次次巡回:伍=陆5 % 壹五

其次次巡回:伍=陆伍 % 壹五

      dividend=15

      dividend=15

      divisor=5

      divisor=5

其三回巡回:0=1伍 % 5

其3回巡回:0=15 % 五

      dividend=5

      dividend=5

      divisor=0

      divisor=0

剥离循环,gcd=$dividend=五

退出循环,gcd=$dividend=伍

能够$1<$二的状态比$一>$2的意况多了一个巡回,结果是一致的

能够$1<$二的气象比$1>$二的气象多了一个循环往复,结果是如出1辙的

    

    

 

 

相关文章