#!/bin/bash
# Skrypt dir emulujący polecenie dir systemu DOS,
# wyświetlający zawartość zadanego katalogu.
# Skrypt można wywoływać z niektórymi standardowymi
# argumentami powyższego polecenia.

function usage
{
cat << EOF >&2
  Użycie: $0 [DOS argumenty] jeden lub kilka katalogów
  Argumenty:
   /D           sortowanie według kolumn
   /H           wyświetlenie pomocy
   /N           długi format danych z nazwami plików po prawej stronie
   /OD          sortowanie plików od najstarszego do najnowszego
   /O-D         sortowanie plików od najnowszego do najstarszego
   /P           wstrzymanie wyświetlania po zapełnieniu ekranu
   /Q           wyświetlenie właściciela pliku
   /S           rekurencyjne wyświetlanie zawartości katalogów
   /W           wyświetlanie danych w szerokim formacie
EOF
  exit 1
}

#####################
### GŁÓWNA CZĘŚĆ SKRYPTU

postcmd=""
flags=""

while [ $# -gt 0 ]
do
  case $1 in
    /D        ) flags="$flags -x"      ;;
    /H        ) usage                  ;;
    /[NQW]    ) flags="$flags -l"      ;;
    /OD       ) flags="$flags -rt"     ;;
    /O-D      ) flags="$flags -t"      ;;
    /P        ) postcmd="more"         ;;
    /S        ) flags="$flags -R"      ;;
            * ) directory=$1 # Nieznany argument, prawd. nazwa katalogu.
                             # Przerwanie instrukcji i wyjście z pętli while.
  esac
  shift       # Argument przetworzony, sprawdzenie, czy są inne.
done

# Koniec przetwarzania argumentów, dalej jest wykonywanie właściwego polecenia:

if [ ! -z "$postcmd" ] ; then
  ls $flags "$directory" | $postcmd
else
  ls $flags "$directory"
fi

exit 0
