Υπολογισμός μαθηματικών εκφράσεων σε γλώσσα δέσμης ενεργειών - Μέρος V


Εσείς οι Άνθρωποι θα νιώθετε άνετα, κατανοώντας τα Σενάρια Shell και γράφοντάς τα άπταιστα, σύμφωνα με τις ανάγκες σας. Αυτή είναι η τελευταία ανάρτηση αυτής της σειράς εκμάθησης, όπου θα πραγματοποιήσουμε λίγο πολύπλοκες Μαθηματικές πράξεις χρησιμοποιώντας γλώσσα σεναρίου. Τα τελευταία τέσσερα άρθρα της σειράς Shell Scripting τα οποία είναι χρονολογικά.

  1. Κατανοήστε τις βασικές συμβουλές γλώσσας δέσμης ενεργειών Linux Shell – Μέρος I
  2. 5 Σενάρια Shell για αρχάριους Linux για να μάθουν προγραμματισμό Shell – Μέρος II
  3. Sailing Through The World of Linux BASH Scripting – Μέρος III
  4. Μαθηματική πτυχή του προγραμματισμού κελύφους Linux – Μέρος IV

Ας ξεκινήσουμε με τη σειρά Fibonacci

Ένα μοτίβο αριθμών όπου κάθε αριθμός είναι το άθροισμα δύο προηγούμενων αριθμών. Η σειρά είναι 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 και δεν σημαίνει ότι κανένα άρθρο για τη γλώσσα δέσμης ενεργειών δεν θα είναι ξανά εδώ, σημαίνει μόνο ότι το σεμινάριο δέσμης ενεργειών του κελύφους έχει τελειώσει και όποτε βρίσκουμε ένα ενδιαφέρον θέμα που αξίζει να γνωρίζουμε ή μια ερώτηση από εσάς, θα χαρούμε να συνεχίσουμε τη σειρά από εδώ.

Μείνετε υγιείς, συντονισμένοι και συνδεδεμένοι με το Tecmint. Πολύ σύντομα θα έρθω με άλλο ένα ενδιαφέρον θέμα, θα λατρέψετε να διαβάσετε. Μοιραστείτε τις πολύτιμες σκέψεις σας στην Ενότητα σχολίων.