Linux Shell指令碼語言與數學表示式

2021-06-20 01:48:34 字數 3983 閱讀 8061

當你理解了shell指令碼,每當需要時都能流暢編寫時,那種感覺很爽的。本章中,我們將教你用指令碼語言進行比較複雜的數**算。

讓我們從斐波那契數列開始吧。

斐波那契數列,又稱**分割數列,指的是這樣乙個數列:0、1、1、2、3、5、8、13、21……,它的每一項都是前兩項的和,定義數列的首兩項為0、1。

指令碼1:fibonacci.sh

#!/bin/bash

echo "how many numbers do you want of fibonacci series ?"

read total

x=0

y=1

i=2

echo "fibonacci series up to $total terms :: "

echo "$x"

echo "$y"

while [ $i -lt $total ]

do i=`expr $i + 1 `

z=`expr $x + $y `

echo "$z"

x=$y

y=$z

done

示例輸出

[root@tecmint ~]# chmod 755 fibonacci.sh

[root@tecmint ~]# ./fibonacci.sh

how many numbers do you want of fibonacci series ?

10 fibonacci series up to 10 terms ::

0 1

1 2

3 5

8 13

21 34

想必大家都清楚,計算機只能理解二進位制格式,即0和1,大多數人都喜歡學習十進位制與二進位制的轉換。不如為這個複雜的計算編寫乙個簡單的指令碼吧。

指令碼2:decimaltobinary.sh

#!/bin/bash

for ((i=32;i>=0;i--)); do

r=$(( 2**$i))

probablity+=( $r )

done

[[ $# -eq 0 ]] &echo -en "decimal\t\tbinary\n"

for input_int in $@; do

s=0

test $ -gt 11 &printf "%-10s\t" "$input_int"

for n in $; do

if [[ $input_int -lt $ ]]; then

[[ $s = 1 ]] && printf "%d" 0

else

printf "%d" 1 ; s=1

input_int=$(( $input_int - $ ))

fi done

echo -e

done

示例輸出

[root@tecmint ~]# chmod 755 decimal2binary.sh

[root@tecmint ~]# ./decimal2binary.sh 1121

decimalbinary

1121 10001100001

注意:上面的指令碼在執行時接受輸入,這對我們來說無疑是個好幫手。

decimaltobinary.sh

其實,內建的「bc」命令僅用簡單的一行**就能將十進位制數轉成二進位制。執行如下指令碼:

[root@tecmint ~]# echo "obase=2; num" | bc
num是你想要轉換的十進位制數,比如,

[root@tecmint ~]# echo "obase=2; 121" | bc 

1111001

接下來是另乙個指令碼,功能與上述指令碼恰恰相反,即將二進位制值轉成十進位制。

指令碼3:binarytodecimal.sh

#!/bin/bash 

echo "enter a number :"

read binary

if [ $binary -eq 0 ]

then

echo "enter a valid number "

else

while [ $binary -ne 0 ]

do bnumber=$binary

decimal=0

power=1

while [ $binary -ne 0 ]

do rem=$(expr $binary % 10 )

decimal=$((decimal+(rem*power)))

power=$((power*2))

binary=$(expr $binary / 10)

done

echo " $decimal"

done

fi

示例輸出

[root@tecmint ~]# chmod 755 binary2decimal.sh

[root@tecmint ~]# ./binary2decimal.sh

enter a number :

11 3

注意:上述功能在終端也能用「bc」命令達成,如下,

[root@tecmint ~]# echo "ibase=2; binary" | bc
binary是你想轉換的二進位制數,例如,

[root@tecmint ~]# echo "ibase=2; 11010101" | bc 

213

同樣,你自己也能編寫八進位制、十六進製制轉換成十進位制,反之亦然。用「bc」命令完成這些轉換的**如下,

十進位制轉八進位制

[root@tecmint ~]# echo "obase=8; decimal" | bc
十進位制轉十六進製制

[root@tecmint ~]# echo "obase=16; decimal" | bc
八進位制轉十進位制

[root@tecmint ~]# echo "ibase=8; octal" | bc
十六進製制轉十進位制

[root@tecmint ~]# echo "ibase=16; hexadecimal" | bc
二進位制轉八進位制

[root@tecmint ~]# echo "ibase=2;obase=8 binary" | bc
shell指令碼語言中一些常用的數值描述如下,

test : integer1 -eq integer2

meaning: integer1 is equal to integer2

test : integer1 -ge integer2

meaning: integer1 is greater than or equal to integer2

test: integer1 -gt integer2

meaning: integer1 is greater than integer2

test:integer1 -le integer2

meaning: integer1 is less than or equal to integer2

test: integer1 -lt integer2

meaning: integer1 is less than integer2

test: integer1 -ne integer2

Linux shell指令碼語言必看書籍推薦

以下書籍都是現在業內主流的linux shell語言好書,同步收錄在頂書,通過下面 進入,實時讀書 頂書 提公升it技術和認知 i book.top linux shell指令碼攻略 第2版 本書結合豐富的實際案例介紹了如何利用shell命令快速開發常規任務,如何憑藉短短幾個命令列從web挖掘資料的...

指令碼語言 shell指令碼

指令碼語言的特徵 指令碼語言 於批處理命令語言,但更接近於程式語言。與批處理命令語言的差別是,指令碼語言有變數和豐富的控制語句 與一般程式語言的差別是 指令碼語言變數的值主要是字串,語言的基本單位是命令 而程式語言變數主要是數值,語言的基本單位是表示式 指令碼語言一般是解釋執行的,速度低,但開發成本...

使用指令碼語言

dim myvar myvar hello world myvar 在這個例子中,option explicit語句強制所有的變數必須專門宣告。dim語句宣告了變數myvar。如果在使用變數前沒有宣告變數,vbscript就會給出執行時錯誤資訊 variable is undefined myvar...