Programowanie w Shellu (index)
Stworzyć plik fibonacci.sh postaci:
#!/bin/bash # # fibonacci.sh # # Wyliczanie elementow ciagu Fibonacciego: # a_1=0, a_2=1, a_{n+2}=a_{n+1}+a_{n} # Wynik wyprowadzany przez echo na stdout (zalecane). fibonacci() { # Sprawdzenie, czy podany jest pierwszy argument if [ -z "$1" ]; then echo "Syntax: fibonacci LICZBA" >& 2 return 1 fi local MINUS1 local MINUS2 # Warunek wyjscia sluzacy do przerwania rekurencji if [ $1 -gt 2 ]; then # Ponowne wywolanie funkcji z mniejszymi liczbami MINUS1=$(fibonacci $(($1-1)) ) MINUS2=$(fibonacci $(($1-2)) ) echo $((MINUS1+MINUS2)) elif [ $1 -eq 2 ]; then echo "1" elif [ $1 -eq 1 ]; then echo "0" else echo "fibonacci: Podano liczbe mniejsza od 1" >& 2 return 1 fi return 0 } # Sprawdzanie ciagu Fibonacciego. KONIEC=10 LICZNIK=1 while [ ${LICZNIK} -le ${KONIEC} ] do echo -n "Fibonacci( ${LICZNIK} )= " fibonacci ${LICZNIK} let "LICZNIK=LICZNIK+1" done exit 0
Uruchomić skrypt poleceniem: ./fibonacci.sh
Poprawić skrypt, aby prosił użytkownika o podanie numeru, dla którego będzie obliczona wartość ciągu Fibonacciego.
Stworzyć plik suma4.sh postaci:
#!/bin/bash # # suma4.sh # # Sumowanie przez rekurencje. # Wynik wyprowadzany przez echo na stdout (zalecane). # Sumuje liczby od najwyzszej! suma4a() { # Sprawdzenie, czy podane sa dwa argumenty if [ $# -ne 2 ] ; then echo "Syntax: suma4a LICZBA1 LICZBA2" >& 2 return 1 fi local TOTAL # Warunek wyjscia sluzacy do przerwania rekurencji if [ $1 -lt $2 ]; then # Ponowne wywolanie funkcji z nastepna liczba TOTAL=$(suma4a $(($1+1)) $2) # Zsumowanie wartosci zwracanej z biezacym $1 let "TOTAL=TOTAL+$1" echo ${TOTAL} # Zwrot nowej sumy else echo $2 # Zwrot $2 po wszystkich wywolaniach fi return 0 } # Wynik to kod powrotu, ktory moze byc odebrany przez $?. # Sumuje liczby od najwyzszej! suma4b() { # Sprawdzenie, czy podane sa dwa argumenty if [ $# -ne 2 ] ; then echo "Syntax: suma4b LICZBA1 LICZBA2" >& 2 return 1 fi # Warunek wyjscia sluzacy do przerwania rekurencji if [ $1 -lt $2 ]; then # Ponowne wywolanie funkcji z nastepna liczba suma4b $(($1+1)) $2 # Zsumowanie wartosci zwracanej z biezacym $1 TOTAL=$(($?+$1)) return ${TOTAL} # Zwrot nowej sumy else return $2 # Zwrot $2 po wszystkich wywolaniach fi } # Sprawdzanie sumowania liczb roznymi metodami. # KONIEC=23 i wiecej daje bledny wynik (kod powrotu powyzej 255) START=1 KONIEC=10 echo -n "Suma liczb od ${START} do ${KONIEC} (rekurencja, echo): " suma4a ${START} ${KONIEC} echo -n "Suma liczb od ${START} do ${KONIEC} (rekurencja, return): " suma4b ${START} ${KONIEC} echo $? exit 0
Uruchomić skrypt poleceniem: ./suma4.sh
Poprawić skrypt, aby prosił użytkownika o podanie wartości zmiennych START i KONIEC.