การคำนวณนิพจน์ทางคณิตศาสตร์ในภาษาสคริปต์เชลล์ - ส่วนที่ 5
ผู้คนของคุณจะรู้สึกสบายใจที่ได้เข้าใจ Shell Scripts และเขียนได้อย่างคล่องแคล่วตามความต้องการของคุณ นี่คือโพสต์สุดท้ายของชุดบทช่วยสอนนี้ ซึ่งเราจะดำเนินการ การดำเนินการทางคณิตศาสตร์ ที่ซับซ้อนเล็กน้อยโดยใช้ภาษาสคริปต์ สี่บทความสุดท้ายของชุด Shell Scripting ซึ่งเรียงตามลำดับเวลา
- ทำความเข้าใจเคล็ดลับภาษาสคริปต์ Linux Shell ขั้นพื้นฐาน - ตอนที่ 1
- 5 เชลล์สคริปต์สำหรับมือใหม่ Linux เพื่อเรียนรู้การเขียนโปรแกรมเชลล์ - ตอนที่ II
- ล่องเรือผ่านโลกแห่งการเขียนสคริปต์ Linux BASH - ตอนที่ III
- ลักษณะทางคณิตศาสตร์ของการเขียนโปรแกรม Linux Shell - ตอนที่ 4
มาเริ่มกันที่ Fibonacci Series
รูปแบบของตัวเลขโดยแต่ละตัวเลขคือผลรวมของตัวเลขสองตัวก่อนหน้า ซีรีส์นี้คือ 0, 1, 1, 2, 3, 5, 8…… ตามคำจำกัดความ ตัวเลขสองตัวแรกในลำดับ Fibonccai คือ 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
ดาวน์โหลด Fibonacci.sh
คุณคุ้นเคยกับข้อเท็จจริงที่ว่าคอมพิวเตอร์เข้าใจเฉพาะในรูปแบบไบนารี่เท่านั้น เช่น '0' และ '1' และพวกเราส่วนใหญ่สนุกกับการเรียนรู้การแปลงของ ทศนิยม ถึง ไบนารี ลองเขียนสคริปต์ง่ายๆ สำหรับการดำเนินการที่ซับซ้อนนี้ดูสิ
สคริปต์ 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 $@; 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
ผลลัพธ์ตัวอย่าง
[root@tecmint ~]# chmod 755 Decimal2Binary.sh
[root@tecmint ~]# ./Decimal2Binary.sh 1121
Decimal Binary
1121 10001100001
หมายเหตุ: สคริปต์ด้านบนยอมรับอินพุต ณ รันไทม์ ซึ่งเห็นได้ชัดว่าเป็นตัวช่วย
ดาวน์โหลด Decimal2Binary.sh
คำสั่ง 'bc' ในตัวสามารถแปลง ทศนิยม เป็น ไบนารี ในสคริปต์บรรทัดเดียว วิ่งไปที่สถานีของคุณ
[root@tecmint ~]# echo "obase=2; NUM" | bc
แทนที่ 'NUM' ด้วยตัวเลขที่คุณต้องการแปลงจาก ทศนิยม เป็น ไบนารี่ ตัวอย่างเช่น,
[root@tecmint ~]# echo "obase=2; 121" | bc
1111001
ต่อไป เราจะเขียนสคริปต์ที่ทำงานตรงข้ามกับสคริปต์ด้านบน การแปลงค่าไบนารี เป็น ทศนิยม
สคริปต์ 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
ผลลัพธ์ตัวอย่าง
[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
ดาวน์โหลด Binary2Decimal.sh
ในทำนองเดียวกัน คุณสามารถเขียนการแปลงจาก ฐานแปด, เลขฐานสิบหก เป็น ทศนิยม และในทางกลับกันด้วยตัวคุณเอง การบรรลุผลลัพธ์ข้างต้นในเทอร์มินัลโดยใช้คำสั่ง '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
การทดสอบ ตัวเลขทั่วไป บางส่วนที่ใช้ในภาษาเชลล์สคริปต์พร้อมคำอธิบายคือ
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
Meaning: INTEGER1 is not equal to INTEGER2
นั่นคือทั้งหมดสำหรับบทความนี้และชุดบทความ นี่เป็นบทความสุดท้ายของ Shell Script Series และไม่ได้หมายความว่าจะไม่มีบทความเกี่ยวกับภาษาสคริปต์กลับมาที่นี่อีก แต่เพียงหมายความว่าบทช่วยสอนการเขียนสคริปต์เชลล์สิ้นสุดลงแล้ว และเมื่อใดก็ตามที่เราพบหัวข้อที่น่าสนใจที่ควรรู้ หรือสอบถามจากพวกคุณ เรายินดีที่จะต่อยอดซีรีส์ต่อจากนี้
รักษาสุขภาพให้แข็งแรง ปรับตัว และเชื่อมต่อกับ Tecmint เร็ว ๆ นี้ฉันจะมาพร้อมกับหัวข้อที่น่าสนใจอีกเรื่องหนึ่ง พวกคุณจะต้องชอบอ่าน แบ่งปันความคิดอันมีค่าของคุณในส่วนความคิดเห็น