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