Przejdź do głównej zawartości

Skrypty Bash - operacje matematyczne

Operacje matematyczne to podstawowy element wymagany w przypadku każdego języka programowania i powłoka bash również oferuje takie możliwości. Środowisko powłoki Bash umożliwia wykonywanie podstawowych działań matematycznych stosując polecenie "let" oraz operatory (( )) i [ ] . Do bardziej zaawansowanych obliczeń możemy wykorzystać programy "expr" i "bc". Więcej informacji o programie bc możemy znaleźć pod adresem : http://oprogramowania-nauka.eshost.info/bc-unix.htm. Poniżej omówienie możliwości wykonywania obliczeń w powłoce systemu Linux. 



Aby wykonać działanie arytmetyczne wykorzystujemy polecenie "let". Przykładowo chcąc dodać dwie liczby możemy wykonać polecenie : 

let result=123+4; echo $result

Wynikiem działania takiego polecenia będzie suma liczb czyli 127. Dodawanie takie możemy zapisać w postaci pliku wykonywalnego jaki można zobaczyć poniżej. Aby skrypt miał nieco sprawniejsze działanie umożliwimy użytkownikom podanie dowolnych liczb jakie mają zostać zsumowane. 


SKRYPT DODAJĄCY DWIE LICZBY 

#!/bin/bash
n1=5;
n2=3;
let result=n1+n2
echo $result

W przykładzie tym wartości liczbowe zostają przypisane do zmiennych "n1" i "n2" które następnie zostają zsumowane, a wynik trafia do zmiennej "result" i zostaje wyświetlony poleceniem "echo". 

Należy pamiętać by w zapisie przypisania wartości do zmiennych nie stosować znaków spacji np.: 

n1 = 5 ;  Taki zapis jest niepoprawny !!! 

Wynikiem działania powyższego skryptu będzie wyświetlenie wyniku dodawania - 8.

DODAWANIE DWÓCH LICZB POBRAWNYCH OD UŻYTKOWNIKA

#!/bin/bash
n1=$1;
n2=$2;
let result=n1+n2
echo $result

W tym przykładzie liczby jakie mają zostać dodane podawane są jako argumenty skryptu i użyte jako "$1" oraz "$2". Skrypt przyjmujący atrybuty uruchamiamy w następujący sposób : 

./dodawanie.sh 5 12 

wynikiem powyższego uruchomienia skryptu będzie suma argumentów podanych po oddzieleniu spacją i wyniesie 17. 

Zamiennie do polecenia "let" może zostać użyty operator [ ] . Sposób użycia przedstawiam poniżej : 

 result=$[ 5 + 5 ]; echo $result

Identyczny efekt możemy osiągnąć stosując inny operator (( )) np.: 

result=$(( 5 + 5 )); echo $result

Zastosowanie ma tu również polecenie "expr" 

result=`expr 5 + 5 `; echo $result

Wszystkie powyższe metody wykonywania działań ograniczone są jednak do operacji na liczbach całkowitych i nie obsługują wartości zmiennoprzecinkowych. Bardziej precyzyjnym i zaawansowanym narzędziem jest kalkulator "bc". 

# echo "12*0.67" | bc
8.04

Jako separator liczby zmiennoprzecinkowej w RedHat podajemy kropkę. 

Polecenia "bc" mogą być przekazywane ze standardowego wejścia "stdin". Można również określać dokładność dziesiętną używając parametr "scale=". np.:

# echo "scale=5;12.76/3.56" | bc
3.58426

Możemy również dokonywać konwersji na inne systemy obliczeniowe "obase=" : 

# echo "obase=2;100" | bc
1100100

Obliczanie potęg i pierwiastków realizujemy następująco : 

# echo "sqrt(100)" | bc
10

# echo "sqrt(2^12)" | bc
64

PRZYKŁADY SKRYPTÓW MATEMATYCZNYCH

Wyświetlenie tabliczki mnożenia z podaniem jej rozmiaru 

#!/bin/bash
#tabliczka mnozenia
wiersz ()
{
for ((i=1; i<=$2; i++))
do
echo -n -e "$(( $i*$1 )) \t"
done
}

echo -n "Podaj rozmiar tabliczki"
read zakres
echo
for ((w=1; w <=$zakres; w++))
do
wiersz $w $zakres
echo
done

Liczba PI z dokładnością 300 miejsc po przecinku 

# echo "scale=300;4*a(1)" | bc -l
3.141592653589793238462643383279502884197169399375105820974944592307\
81640628620899862803482534211706798214808651328230664709384460955058\
22317253594081284811174502841027019385211055596446229489549303819644\
28810975665933446128475648233786783165271201909145648566923460348610\
454326648213393607260249141272




Komentarze

  1. zainteresował mnie ten blog !

    OdpowiedzUsuń
  2. świetny ten blog i ciekawe treści

    OdpowiedzUsuń
  3. Bardzo podoba mi się ten wpis.

    OdpowiedzUsuń
  4. człowiek każdego dnia uczy się nowych rzeczy, polecę tego bloga znajomym.

    OdpowiedzUsuń
  5. Długo już śledzę ten blog, są tu ciekawe i przydatne informację, polecam wszystkim.

    OdpowiedzUsuń
  6. Dużo ciekawych i przydatnych informacji znalazłam na tym blogu. Zajrzę tu jeszcze na pewno.

    OdpowiedzUsuń
  7. Marek CWEL MARUCHA26 lutego 2024 10:34

    genialny blog

    OdpowiedzUsuń

Prześlij komentarz

Najczęściej czytane w tym miesiącu

50 popularnych pytań dotyczących systemu Linux zadawanych na rozmowach kwalifikacyjnych. (Pytania & Odpowiedzi)

Jak dodać użytkownika w systemie Windows z poziomu konsoli CMD? (net user, net localgroup)

Generowanie testowych plików o określonej wielkości