คุณคงรู้สึกสบายใจ ทำความเข้าใจ Shell Scripts และเขียนได้อย่างคล่องแคล่ว ตามความต้องการ นี่คือโพสต์สุดท้ายของซีรีส์บทช่วยสอนนี้ ซึ่งเราจะดำเนินการ Mathematical Operations ที่ซับซ้อนเล็กน้อยด้วยภาษาสคริปต์ บทความ 4 บทล่าสุดของซีรีส์ Shell Scripting ซึ่งเรียงลำดับตามเวลา
- Understand Basic Linux Shell Scripting Language Tips – Part I
- 5 Shell Scripts for Linux Newbies to Learn Shell Programming – Part II
- Sailing Through The World of Linux BASH Scripting – Part III
- 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