Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> การเขียนโปรแกรม BASH

การคำนวณนิพจน์ทางคณิตศาสตร์ในภาษาสคริปต์ของเชลล์ – ตอนที่ V

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

การคำนวณนิพจน์ทางคณิตศาสตร์ในภาษาสคริปต์ของเชลล์ – ตอนที่ V
  1. ทำความเข้าใจเคล็ดลับภาษาสคริปต์ Linux Shell ขั้นพื้นฐาน – ตอนที่ 1
  2. 5 เชลล์สคริปต์สำหรับมือใหม่ Linux เพื่อเรียนรู้การเขียนโปรแกรมเชลล์ – ตอนที่ II
  3. ท่องโลกของ Linux BASH Scripting – ตอนที่ III
  4. แง่มุมทางคณิตศาสตร์ของการเขียนโปรแกรม Linux Shell – ส่วนที่ IV

มาเริ่มกันที่ 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
ตัวอย่างผลลัพธ์
[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

คุณคุ้นเคยกับความจริงที่ว่าคอมพิวเตอร์เข้าใจเฉพาะในรูปแบบไบนารี นั่นคือ '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 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

ดี inbuilt 'bc ' คำสั่งแปลง ทศนิยม เป็น ไบนารี ในสคริปต์ของบรรทัดเดียว วิ่งที่เทอร์มินัลของคุณ

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

แทนที่ 'NUM ' ด้วยตัวเลขที่คุณต้องการแปลงจาก ทศนิยม เป็น ไบนารี . ตัวอย่างเช่น

[admin@wsxdn.com ~]# 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
ตัวอย่างผลลัพธ์
[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

แทนที่ 'ไบนารี ' ด้วยเลขฐานสอง กล่าวคือ

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

213

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

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

ทศนิยมเป็นฐานสิบ
[admin@wsxdn.com ~]# echo "obase=8; Decimal" | bc
ทศนิยมเป็นเลขฐานสิบหก
[admin@wsxdn.com ~]# echo "obase=16; Decimal" | bc
ฐานแปดถึงทศนิยม
[admin@wsxdn.com ~]# echo "ibase=8; Octal" | bc
ฐานสิบหกเป็นทศนิยม
[admin@wsxdn.com ~]# echo "ibase=16; Hexadecimal" | bc
ไบนารีถึง Octal
[admin@wsxdn.com ~]# 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 . เร็วๆ นี้ผมจะมาพร้อมกับหัวข้อที่น่าสนใจอีกหัวข้อหนึ่ง พวกคุณจะชอบอ่าน แบ่งปันความคิดอันมีค่าของคุณในส่วนความคิดเห็น .