25
Lis

Kolejki Fifo i Sygnały w Bash’u

client.sh

#!/bin/bash
number=$1
server_home=$2
#sprawdza czy wyrażenia są równe oraz czy plik jest łączem nazwanym, jeżei nie wyświetla komunikat.
if [ ! -p /home/studinf/$server_home/tmp/serwerfifo ]
then
  echo "Błąd połączenia"
fi
if [ ! -p ~/tmp/klientfifo ]
then
  mkfifo ~/tmp/klientfifo
fi
#zapisuje dane do pliku
echo $HOME:$number > /home/studinf/$server_home/tmp/serwerfifo
wynik=`cat < ~/tmp/klientfifo`
#wyświetla obliczony wynik
echo "Wynik to: $wynik"

serwer.sh

#!/bin/bash
while true
do
#pobiera dane
  client_msg=`cat < ~/tmp/serwerfifo`
  IFS=":"
  tokeny=($client_msg)
  client_home=${tokeny[0]}
  number=${tokeny[1]}
#polecenie uruchamiające plik odpowiedzialny za obliczenie pewnej funkcji arytmetycznej
  ./reply.sh $number $client_home &
done
reply.sh
#!/bin/bash
number=$1
client_home=$2
# mnożenie wyniku oraz odejmowanie od niego liczby dwa np. 3*3 - 2
let wynik=number*number+2
#zapisuje wynik
echo $wynik > $client_home/tmp/klientfifo
25
Lis

Finder

Możliwość komentowania Finder została wyłączona
Poszukiwacz pików, działa na zasadzie współbieżnych, rekurencyjnych wywołań dla wszystkich podkatalogów danego katalogu.
#!/bin/bash

directory=$1
filename=$2
declare -a pids
declare -i status=0

if [ -d $directory ]					 # Jesli folder istnieje
then
	if [ -e $directory/$filename ]		 # jesli plik w danym folderze istnieje
	then
		echo -e "\033[42;37;1m $directory/$filename \033[0m"
		status=1
	fi
	echo -e "$directory/ "

	for subDirectory in $directory/*					
	  do
		if [ -d $subDirectory ]
		then
			./finder.sh $subDirectory $filename 1 & # Rekurencyjne wywołanie funkcji 
			pid=$$
			pids=( ${pids[@]-} $(echo "$pid") )
		fi
	done
	for i in $pids
	do
		wait $!					# Czekamy na ostatni proces potomny
		if [  $? -eq 1 ]		
		then 
			status=1			
		fi
	done

else
	echo -e "\033[41;37;1m Can't find '\033[44;37;1m$directory\033[0m\033[41;37;1m' folder!!!! \033[0m"
fi

if [ -e $3 ] && [ $status -eq 0 ] 		# Jeśli istnieje trzeci argument i zwrócony status wynosi 0, tzn ze nie znaleziono pliku.
then 
	echo -e "\033[41;37;1m File not found \033[0m"
fi
exit $status