#! /bin/sh
## test_1
for dirname
do
	if [ ! -d "$dirname" ]
	then
		echo "$dirname is not a directory!" >> errlog
	else
		for filename in "$dirname"/* "$dirname"/.*
		do
#			може и така, защото rm не трие папки без -r
#			[ -x $filename ] && rm -f $filename 2> /dev/null
			[ -f "$filename" -a -x "$filename" ] && rm -f "$filename"
		done
	fi
done
## За всеки от параметрите, подадени на скрипта проверяваме да не би да не е валидно име на директория.
## Припомняме, че тестът [ ! -d "$dirname" ] проследява символната връзка, т.е. евентуално може да се добави преди това
## и проверка [ ! -L "$dirname" ].
## Ако е подадено валидно име на директория, обхождаме всички файлове (включително и скритите) и последователно проверяваме 
## дали поредният файл е regular файл, за който имаме execute право и ако е така, го изтриваме с опция -f (force) на rm (за да
## не задава излишни въпроси от типа: "Ти нямаш право да пишеш в този файл, сигурен ли си, че искаш да го изтриеш?")


#! /bin/sh
## test_2
set * .[^.]*
result=$1
for filename
do
	[ $filename -nt $result ] && result=$filename
done
echo $result
## set * .[^.]* поставя за позиционни параметри имената на всички файлове в текущата директория, включително и скритите (без . и ..),
## т.е. е почти същото като set `ls -A`, но вече сме обяснявали защо не е добре да използваме втория вариант.
## Обикаляме последователно всички позиционни параметри (т.е. всички файлове в текущата директория) и за всеки следващ проверяваме
## дали е по-скоро модифициран от най-скоро модифицирания открит до момента.
## Възможно беше да ползваме и for filename in * .[^.]*, но това прави по-трудно вземането на начална стойност в result.
## Тъй като вече сме запазили стойността на първия подаден позиционен аргумент, може да направим обхождането и с while shift и 
## да сравняваме $result с $1.


#! /bin/bash
## test_3

result="$1"
last="$1"

recursive_walk()
{
	if [ $1 -ot $last ]
	then
		last="$1"
		result="$1"
	elif [ ! "$1" -nt "$last" ]
	then
		[ "$1" != "$last" ] && result="$result $1"
	fi
	[ ! -d "$1" ] && return 0
	for filename in "$1"/* "$1"/.[^.]*
	do
		recursive_walk "$1"/"$filename"
	done
}

for dirname
do
	recursive_walk "$dirname"
done

echo $result

## В result натрупваме резултата - списъка с най-отдавна модифицираните файлове, открити до момента.
## В last помним името на един (последния) открит измежду файловете в result.
## В началото и двете променливи инициализираме с първата подадена ни папка.
## Дефинираме функция за рекурсивно обхождане на директория (подадена като първи параметър на функцията).
## Тази функция първо проверява дали подадения й файл е по-отдавна модифициран от този, чието име е в last.
## Aко е - изпразва резултата и го слага там, като също променя и значението на last.
## Ако не - проверява дали са модифицирани по едно и също време (т.е. да не е нито по-стар, нито по-нов от last).
## Тогава само го дописваме към резултата. Проверката дали е различен от last е защото в началото сме инициализирали
## result и last с $1 и може да се получи повторение.
## Ако файлът, подаден на нашата функция, не е директория - обхождането е завършено.
## В противен случай трябва да обходим рекурсивно всички файлове в тази директория.
## Така написаната функция пускаме за всеки от командните параметри.
## Накрая изписваме резултата :).


#! /bin/bash
## test_4
for dirname
do
	regular=0
	directory=0
	symlink=0
	fifo=0
	char_special=0
	block_special=0
	socket=0
	for filename in "$dirname"/* "$dirname"/.[^.]*
	do
		if [ -L "$filename" ]
		then
			: $((symlink += 1))
		elif [ -c "$filename" ]
		then
			: $((char_special += 1))
		elif [ -b "$filename" ]
		then
			: $((block_special += 1))
		elif [ -d "$filename" ]
		then
			: $((directory += 1))
		elif [ -f "$filename" ]
		then
			: $((regular += 1))
		elif [ -p "$filename" ]
		then
			: $((fifo += 1))
		else
			: $((socket += 1))
		fi
	done
	echo "Directory $dirname contains:"
	echo "$regular regular file(s)"
	echo "$directory directory/directories"
	echo "$symlink symbolic link(s)"
	echo "$fifo named pipe(s)"
	echo "$char_special character special file(s)"
	echo "$block_special block special file(s)"
	echo "$socket socket(s)"
done

## Кодът говори сам за себе си ;)


#! /bin/bash
## test_5
function qsort()
{
	[ $# -le 1 ] && echo $@ && return 0
	elem=$1
	less=""
	more=""
	while shift
	do
		if [ $1 -le $elem ]
		then
			less="$less $1"
		else
			more="$more $1"
		fi
	done
	echo `qsort $less` $elem `qsort $more`
}

qsort $@

## Подточка б) само прочитате входа в 1 променлива и подавате нея вместо $@.

