bash-shell高級編程--求最大公約數

一個完整的編程語言肯定少不了對計算能力的支持,同樣shell腳本中也提供了對計算能力的支持,下面的腳本就是實現求兩個數的最大公約數的shell腳本。
已在ubuntu16.04上驗證過

#!/bin/bash
# gcd.sh: 最大公約數
#使用Euclid的算法

# 兩個整數的"最大公約數" (gcd),
#+ 就是兩個整數所能夠同時整除的最大的數.

# Euclid算法採用連續除法.
# 在每一次循環中,
#+ 被除數 <--- 除數
#+ 除數 <--- 餘數
#+ 直到 餘數 = 0.
#+ 在最後一次循環中, gcd = 被除數.
#
# 關於Euclid算法的更精彩的討論, 可以到
#+ Jim Loy的站點, http://www.jimloy.com/number/euclids.htm.

# ------------------------------------------------------
# 參數檢查
ARGS=2
E_BADARGS=65

if [ $# -ne "$ARGS" ]
then
 echo "Usage: `basename $0` first-number second-number"
 exit $E_BADARGS
fi
# ------------------------------------------------------

gcd ()
{
 dividend=$1
# 隨意賦值.
 divisor=$2
#+ 在這裏, 哪個值給的大都沒關係.
# 爲什麼沒關係?
 remainder=1
# 如果在循環中使用了未初始化的變量,
#+ 那麼在第一次循環中,
#+ 它將會產生一個錯誤消息.
 until [ "$remainder" -eq 0 ]
 do
let "remainder = $dividend % $divisor"
dividend=$divisor
# 現在使用兩個最小的數來重複.
divisor=$remainder
 done
# Euclid的算法
}
# Last $dividend is the gcd.
gcd $1 $2
echo; echo "GCD of $1 and $2 = $dividend"; echo
# Exercise :
# --------
# 檢查傳遞進來的命令行參數來確保它們都是整數.
#+ 如果不是整數, 那就給出一個適當的錯誤消息並退出腳本.
exit 0

執行結果

andrew@andrew:/work/bash/src$ bash gcd.sh  2345 56

GCD of 2345 and 56 = 7

參考資料 – bash高級編程

發佈了366 篇原創文章 · 獲贊 144 · 訪問量 32萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章