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
zainteresował mnie ten blog !
OdpowiedzUsuńmiło sie czyta takie blogi
OdpowiedzUsuńświetny ten blog i ciekawe treści
OdpowiedzUsuńświetny blog, ciekawe wpisy
OdpowiedzUsuńBardzo podoba mi się ten wpis.
OdpowiedzUsuńczłowiek każdego dnia uczy się nowych rzeczy, polecę tego bloga znajomym.
OdpowiedzUsuńDługo już śledzę ten blog, są tu ciekawe i przydatne informację, polecam wszystkim.
OdpowiedzUsuńDużo ciekawych i przydatnych informacji znalazłam na tym blogu. Zajrzę tu jeszcze na pewno.
OdpowiedzUsuńgenialny blog
OdpowiedzUsuń