Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> การเขียนโปรแกรม Bash

เชี่ยวชาญการคำนวณคณิตศาสตร์ซับซ้อนใน Shell Scripts – ตอนที่ 5

คุณคงรู้สึกสบายใจ ทำความเข้าใจ Shell Scripts และเขียนได้อย่างคล่องแคล่ว ตามความต้องการ นี่คือโพสต์สุดท้ายของซีรีส์บทช่วยสอนนี้ ซึ่งเราจะดำเนินการ Mathematical Operations ที่ซับซ้อนเล็กน้อยด้วยภาษาสคริปต์ บทความ 4 บทล่าสุดของซีรีส์ Shell Scripting ซึ่งเรียงลำดับตามเวลา

  1. Understand Basic Linux Shell Scripting Language Tips – Part I
  2. 5 Shell Scripts for Linux Newbies to Learn Shell Programming – Part II
  3. Sailing Through The World of Linux BASH Scripting – Part III
  4. Mathematical Aspect of Linux Shell Programming – Part IV

เริ่มต้นกับชุดฟีโบนัชชี

รูปแบบของตัวเลขที่แต่ละตัวเป็นผลรวมของสองตัวก่อนหน้า ชุดคือ 0, 1, 1, 2, 3, 5, 8... ตามนิยาม ตัวเลขสองตัวแรกในลำดับ Fibonacci คือ 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
ตัวอย่างผลลัพธ์
[admin@wsxdn.com ~]# chmod 755 Fibonacci.sh
[admin@wsxdn.com ~]# ./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

ดาวน์โหลด Fibonacci.sh

คุณคุ้นเคยกับข้อเท็จจริงว่าคอมพิวเตอร์เข้าใจเฉพาะรูปแบบ Binary คือ '0' และ '1' และเราส่วนใหญ่เพลินเพลินไปกับการเรียนรู้การแปลง Decimal เป็น Binary จะเป็นอย่างไรถ้าเขียนสคริปต์ง่ายๆ สำหรับการดำเนินการซับซ้อนนี้

สคริปต์ที่ 2: Decimal2Binary.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 admin@wsxdn.com; do
    s=0
    test ${#input_int} -gt 11 &printf "%-10s\t" "$input_int"
    for n in ${Probablity[@]}; do
        if [[ $input_int -lt ${n} ]]; then
            [[ $s = 1 ]] && printf "%d" 0
        else
            printf "%d" 1 ; s=1
            input_int=$(( $input_int - ${n} ))
        fi
    done
    echo -e
done
ตัวอย่างผลลัพธ์
[admin@wsxdn.com ~]# chmod 755 Decimal2Binary.sh
[admin@wsxdn.com ~]# ./Decimal2Binary.sh 1121
Decimal Binary
1121 10001100001

หมายเหตุ: สคริปต์ข้างต้นรับอินพุตในระหว่างรันไทม์ ซึ่งช่วยเหลือได้ชัดเจน

ดาวน์โหลด Decimal2Binary.sh

คำสั่ง built-in 'bc' สามารถแปลง decimal เป็น binary ในสคริปต์บรรทัดเดียวได้ รันที่เทอร์มินัลของคุณ

[admin@wsxdn.com ~]# echo "obase=2; NUM" | bc

แทนที่ 'NUM' ด้วยตัวเลขที่คุณต้องการแปลงจาก Decimal เป็น Binary ตัวอย่าง

[admin@wsxdn.com ~]# echo "obase=2; 121" | bc
1111001

ต่อไปเราจะเขียนสคริปต์ที่ทำงานตรงข้ามกับข้างต้น แปลงค่า Binary เป็น Decimal

สคริปต์ที่ 3: Binary2Decimal.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
ตัวอย่างผลลัพธ์
[admin@wsxdn.com ~]# chmod 755 Binary2Decimal.sh
[admin@wsxdn.com ~]# ./Binary2Decimal.sh
Enter a number : 11
3

หมายเหตุ: ฟังก์ชันข้างต้นสามารถทำได้ในเทอร์มินัลด้วยคำสั่ง 'bc' ดังนี้

[admin@wsxdn.com ~]# echo "ibase=2; BINARY" | bc

แทนที่ 'BINARY' ด้วยตัวเลขฐานสอง เช่น

[admin@wsxdn.com ~]# echo "ibase=2; 11010101" | bc
213

ดาวน์โหลด Binary2Decimal.sh

เช่นเดียวกัน คุณสามารถเขียนการแปลงจาก octal, hexadecimal เป็น decimal และในทางกลับกันได้เอง การทำให้ผลลัพธ์ข้างต้นสำเร็จในเทอร์มินัลด้วยคำสั่ง 'bc' คือ

Decimal to Octal
[admin@wsxdn.com ~]# echo "obase=8; Decimal" | bc
Decimal to Hexadecimal
[admin@wsxdn.com ~]# echo "obase=16; Decimal" | bc
Octal to Decimal
[admin@wsxdn.com ~]# echo "ibase=8; Octal" | bc
Hexadecimal to Decimal
[admin@wsxdn.com ~]# echo "ibase=16; Hexadecimal" | bc
Binary to Octal
[admin@wsxdn.com ~]# echo "ibase=2;obase=8 Binary" | bc

บาง Common Numeric tests ที่ใช้ในภาษาเชลล์สคริปติ้งพร้อมคำอธิบาย

Test : INTEGER1 -eq INTEGER2 Meaning: INTEGER1 เท่ากับ INTEGER2
Test : INTEGER1 -ge INTEGER2 Meaning: INTEGER1 มากกว่าหรือเท่ากับ INTEGER2
Test: INTEGER1 -gt INTEGER2 Meaning: INTEGER1 มากกว่า INTEGER2
Test: INTEGER1 -le INTEGER2 Meaning: INTEGER1 น้อยกว่าหรือเท่ากับ INTEGER2
Test: INTEGER1 -lt INTEGER2 Meaning: INTEGER1 น้อยกว่า INTEGER2
Test: INTEGER1 -ne INTEGER2 Meaning: INTEGER1 ไม่เท่ากับ INTEGER2

ขอจบเพียงเท่านี้สำหรับบทความนี้ และซีรีส์บทความ นี่คือบทความสุดท้ายของ Shell Script Series และไม่ได้หมายความว่าไม่มีบทความเกี่ยวกับภาษาสคริปต์ที่นี่อีกแล้ว แค่หมายถึงบทช่วยสอน shell scripting จบแล้ว และเมื่อเราพบหัวข้อน่าสนใจที่คุ้มค่าที่จะรู้ หรือคำถามจากคุณๆ เราจะยินดีดำเนินต่อซีรีส์จากที่นี่

อยู่กับสุขภาพดี tuned และเชื่อมต่อกับ Tecmint เร็วๆ นี้ผมจะมากับหัวข้อน่าสนใจอีกเรื่องที่คุณจะชอบอ่าน แชร์ความคิดเห็นที่มีค่าใน Comment Section