當你理解了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" | bcnum是你想要轉換的十進位制數,比如,
[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注意:上述功能在終端也能用「bc」命令達成,如下,[root@tecmint ~]# ./binary2decimal.sh
enter a number :
11 3
[root@tecmint ~]# echo "ibase=2; binary" | bcbinary是你想轉換的二進位制數,例如,
[root@tecmint ~]# echo "ibase=2; 11010101" | bc同樣,你自己也能編寫八進位制、十六進製制轉換成十進位制,反之亦然。用「bc」命令完成這些轉換的**如下,213
十進位制轉八進位制
[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" | bcshell指令碼語言中一些常用的數值描述如下,
test : integer1 -eq integer2meaning: integer1 is equal to integer2
test : integer1 -ge integer2meaning: integer1 is greater than or equal to integer2
test: integer1 -gt integer2meaning: integer1 is greater than integer2
test:integer1 -le integer2meaning: integer1 is less than or equal to integer2
test: integer1 -lt integer2meaning: 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...