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
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 (9)