Nowe posty

Autor Wątek: Wytłumaczenie skryptu  (Przeczytany 1994 razy)

sashafierce

  • Gość
Wytłumaczenie skryptu
« dnia: 2011-06-09, 17:24:39 »
Czy mógłby mi ktoś pomóc rozszyfrować poniższy kod?

#!/bin/bash

# liczba - blokada zapisu (plik zablokowany n razy) //  p - pelna blokada

function can_read
{
[ ! -e "baza.lock" ] && return 0
read strlock < "baza.lock"
[ "$strlock" = "p" ] && return 1
return 0
}

function can_write
{
[ -e "baza.lock" ] && return 1
return 0
}


function lock_w # zablokuj przed zapisem
{
while ! can_read
do
sleep 1s
done

val=0
[ -e "baza.lock" ] && read val < "baza.lock"
((val++))
echo -n "$val" > "baza.lock"
}

function lock_p # calkowicie zablokuj
{
while ! can_write
do
sleep 1s
done
echo -n "p" > "baza.lock"
}

function unlock
{
read val < "baza.lock"
if [ "$val" = "1" -o "$val" = "p" ]
then
rm "baza.lock"
else
echo $(($val-1)) > "baza.lock"
fi
}

function find
{
echo "Podaj fragment nazwiska autora: "
read NAZWISKO
echo "Podaj tytuł książki: "
read TYTUL

lock_w
awk -v TYTUL=$TYTUL -v NAZWISKO=$NAZWISKO '
BEGIN{FS=":"; print "Znaleziono:"}
tolower($2) ~ tolower(NAZWISKO) && tolower($3) ~ tolower(TYTUL){
if ( $4 == "" ) $4 = "Na półce"
else $4 = "Wyporzyczone przez " $4
print $1 ", " $2 ", " $3 ", " $4
}
' < baza
unlock
}

function oddaj
{
lock_p
cat baza | awk -v SYGN=$1 '
BEGIN{FS=":"}
$1 == SYGN {print $1 ":" $2 ":" $3 ":"; next}
{print}
' > baza
unlock
}

function wypozycz
{
lock_p
cat baza | awk -v SYGN=$1 -v LOGIN=$LOGIN '
BEGIN{FS=":"}
$1 == SYGN {print $1 ":" $2 ":" $3 ":" LOGIN; next}
{print}
' > baza
unlock
}

function sygn
{
lock_w
user=$( awk -v SYGN="$1" 'BEGIN{FS=":"};$1 == SYGN {print $4}' < baza )
unlock
[ "$user" == "$LOGIN" ] && oddaj $1
[ "$user" == "" ] && wypozycz $1
}

##########################################################

echo "Podaj swoj login: "
read LOGIN

while true
do
echo "Wpisz [ f - wyszukaj | q - wyjdz | numer sygnatury - wypozycz / oddaj ]:"
read odp
case $odp in
"f" ) find;;
"q" ) break;;
[0-9]* ) sygn $odp
esac
done

Offline Paweł Kraszewski

  • Administrator
  • Guru
  • *****
  • Wiadomości: 3062
  • Lenistwo jest matką potrzeby = babcią wynalazku
    • Zobacz profil
Wytłumaczenie skryptu
« Odpowiedź #1 dnia: 2011-06-09, 18:51:06 »
Paweł Kraszewski
~Arch/Void/Gentoo/FreeBSD/OpenBSD/Specjalizowane customy