Izračunavanje matematičkih izraza u jeziku shell skriptiranja - dio V
Vi biste se osjećali ugodno, razumjeli bi Shell skripte i pisali ih tečno, prema vašim potrebama. Ovo je posljednji post u ovoj seriji tutorijala, gdje ćemo izvoditi malo složene Matematičke operacije koristeći skript jezik. Posljednja četiri članka serije Shell Scripting koji su hronološki.
- Razumjeti osnovne savjete za jezik skriptiranja za Linux Shell – I dio
- 5 Shell skripti za Linux početnike da nauče Shell programiranje – II dio
- Plovidba kroz svijet Linux BASH skriptiranja – III dio
- Matematički aspekt Linux shell programiranja – IV dio
Počnimo sa Fibonačijevim nizom
Obrazac brojeva gdje je svaki broj zbir dva prethodna broja. Serija je 0, 1, 1, 2, 3, 5, 8…… Po definiciji, prva dva broja u Fibonccai nizu su 0 i 1.
Skripta 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
Sample Output
[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
Preuzmite Fibonacci.sh
Upoznati ste sa činjenicom da računar razumije samo u binarnom formatu, tj. '0' i '1' i većina nas je uživala u učenju konverzije Decimalni u binarni. Šta kažete na pisanje jednostavne skripte za ovu složenu operaciju.
Skripta 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
Sample Output
[root@tecmint ~]# chmod 755 Decimal2Binary.sh
[root@tecmint ~]# ./Decimal2Binary.sh 1121
Decimal Binary
1121 10001100001
Napomena: Gornja skripta prihvata unos u toku rada, što je očigledno pomoć.
Preuzmite Decimal2Binary.sh
Pa, ugrađena naredba ‘bc‘ može pretvoriti decimalni u binarni u skriptu od jednog reda. Trči, na svom terminalu.
[root@tecmint ~]# echo "obase=2; NUM" | bc
Zamijenite „NUM“ brojem koji želite pretvoriti iz decimalne u binarne. Na primjer,
[root@tecmint ~]# echo "obase=2; 121" | bc
1111001
Sljedeće ćemo pisati skriptu koja funkcionira upravo suprotno od gornje skripte, Pretvaranje binarnih vrijednosti u decimale.
Skripta 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
Sample Output
[root@tecmint ~]# chmod 755 Binary2Decimal.sh
[root@tecmint ~]# ./Binary2Decimal.sh
Enter a number :
11
3
Napomena: Gornja funkcija se može izvesti u terminalu pomoću naredbe „bc“ kao.
[root@tecmint ~]# echo "ibase=2; BINARY" | bc
Zamijenite 'BINARNO' binarnim brojem, tj.
[root@tecmint ~]# echo "ibase=2; 11010101" | bc
213
Preuzmite Binary2Decimal.sh
Slično možete sami napisati konverziju iz oktalnog, heksadecimalnog u decimalno i obrnuto. Ostvarivanje gornjeg rezultata u terminalu pomoću naredbe „bc“ je.
Decimala u oktalnu
[root@tecmint ~]# echo "obase=8; Decimal" | bc
Decimalni u heksadecimalni
[root@tecmint ~]# echo "obase=16; Decimal" | bc
Od oktalnog do decimalnog
[root@tecmint ~]# echo "ibase=8; Octal" | bc
Heksadecimalno u decimalno
[root@tecmint ~]# echo "ibase=16; Hexadecimal" | bc
Binarno u oktalno
[root@tecmint ~]# echo "ibase=2;obase=8 Binary" | bc
Neki od Uobičajenih numeričkih testova koji se koriste u jeziku shell skriptova sa opisom su.
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
To je sve za ovaj članak i seriju članaka. Ovo je posljednji članak Shell Script Series i to ne znači da nijedan članak o jeziku skriptiranja neće biti ovdje, to samo znači da je vodič za shell skriptiranje završen i kad god pronađemo zanimljivu temu vrijednu poznavanja ili upit od vas ljudi, rado ćemo nastaviti seriju odavde.
Ostanite zdravi, podešeni i povezani na Tecmint. Vrlo brzo dolazim sa još jednom zanimljivom temom, vi ćete voljeti čitati. Podijelite svoje vrijedne misli u Odjeljku za komentare.