Kolos:
1. Wypisz wszystkie pliki specjalne do pliku ktory jest pierwszym parametrem wywolania a ich ilosc wypisz do pliku ktory jest drugim parametrem wywolania
Kod:
#!/bin/bash
if [ $# == 2 ];then //jeśli sa dwa parametry wowałania
zm=`find /dev -type b -o -type c` //pliki specjalne znajuduja sie w kataogu /dev
//pliki specjalne : b typ urzaddzenie blokowe, c-typ urządzenie znakowe
zm1=`find /dev -type b -o -type c | wc -l`
echo "$zm" > $1 // wyświetlenie wartość zmiennej i przekierowanie do $1 czyli pierwszego
//parametru wywołania
echo "$zm1"> $2
else
echo "Zla ilosc parametrow"
fi //zakończenie petli
exit 0
2. Wylistuj wszystkie pliki z katalogu bedącego 1. parametrem wywołania (oczywiscie na ekran). Oblicz liczbę podkatalogów znajdujacych sie w tym katalogu. Oblicz ilość plików zwykłych w tym katalogu i wpisz do pliku bedacym 2. parametrem wywołania. Sprawdz zajmowana przestrzen dyskowa przez ten katalog, wyslij na ekran i do pliku bedacego 3. parametrem wywołania.
#!/bin/bash
if [ $# == 3 ];then
ls $1 -l > plik //listuje I wrzuca do plik
grep '^-' plik #listowanie plikow //sortuje wszystkie pliki z plik
zmienna=`grep '^d' plik | wc -l` //obliczanie ilosci katalogow
echo "ilosc katalogow $zmienna"
zmienna1=`grep '^-' plik | wc -l` //obliczanie ilosci plikow
// ` ` całe polecenie się wpisuje, a' ` to jest kryterium
echo "Liczba plikow $zmienna1"
echo "Liczba plikow $zmienna1" >$2
echo "Przestrzen dyskowa: $1"
df $1 | tail -1 /wyswietla 1 linike od dołu, df wypisuje wszystko wraz z przestrzenia dyskowa
df $1 | tail -1 > $3
echo "przestrzen dyskowa: " >> $3 //dopisuje do pliku , nie nadpisuje
else
echo "Zla ilosc parametrow"
fi
exit 0
1) Z katalogu domowego wypisz na ekran oraz skieruj do pliku alfa który jest drugim parametrem wywołania pliki zwykłe, które nie były modyfikowane przez miesiąc, których nazwa ma pięć znaków i zaczyna się na literę P. Policz również ilość plików posiadających pełny zestaw praw dostępu, wyniki zapisz do pliku będącego pierwszym pierwszym parametrem uruchomienia.
Kod:
#! /bin/bash
if [ $# -eq 2 ]; then // -eq to znaczy ==
`find . -maxdepth 1 -mtime +30 -type f -name 'P????' | tee $2` //maxdepth okresla makymalna
//głebokosc katalogu
`ls -la | cut -d ' ' -f 1 | grep 'rwxrwxrwx' | wc -l > $1` // odcina przy katalogu spacje , a przy pliku
//pierwsza kolumne I wybiera wysztskie prawa I zlicza
echo `cat $2` //cat wyswietla to co jest w parametrze drugim
else
echo "Zbyt malo argumentow (potrzebne 2)"
fi
W tym przypadku skrypt jest już w miarę poprawiony. Pierwotnie użyłem polecenia ls -l, przez co nie brał on pod uwagę plików ukrytych. Wersja z ls -la powinna być dobra.
2) Odnajdź pliki z rozszerz prawami dostępu, ich nazwy zapisz do pliku który jest drugim parametrem wywołania, w pliku który jest pierwszym parametrem wywołania zapisz ich ilość.
Kod:
#! /bin/bash
if [ $# -eq 2 ];
then
`ls -la | grep 'rw[Ssx]rw[Ssx]rw[Ttx]' | tr -s ' ' | cut -d ' ' -f 8 >$2` //tr -s odcieło cos chyba
`cat $2 | wc -l >$1` //cat -wyswietla
else
echo "Zbyt malo argumentow (wymagane 2)"
fi
// cut wyciaga po separatorze -d kolumny o numerze -f czyli w naszym przykładzie zostaje wyciagnieta tylko kolumna 8
Tu szanowny p. Wojtas wspomniał, że może zajść sytuacja, w której wyświetlone zostaną katalogi . oraz .. a jest to raczej niechcianym efektem. Ponadto zwrócił uwagę na prawa dostępu, bo nie uwzględniłem w pierwszej wersji, że s oraz t mogą być również dużymi literami.
1. znajdź wszystkie pliki specjalne i wypisz ich nazwy do pliku będącego 2 parametrem wywołania a ich liczbę do pliku który jest drugim parametrem wywołania.
#!/bin/bash
if [ $# == 2 ];then
zm=`find /dev -type b -o -type c`
zm1=`find /dev -type b -o -type c | wc -l`
echo "$zm" > $1
echo "$zm1"> $2
else
echo "trzeba podac 2 argumenty"
fi
exit 0
2. z pliku będącego 2 parametrem wywołania wybierz linie 3,8 od początku i 5 od końca i zapisz je do pliku bedącego 1 parametrem wywołania. posortuj plik i ponumeruj linie.
#!/bin/bash
if [ $# == 2 ];then
sed -n '3 p' < $2 > $1
sed -n '8 p' < $2 >> $1 //wyciga tylko 8 linie od pocztku
tail -n 5 $2| head -n -4 >> $1 // SAMO TAIL wyciaga piec wierszy od konca , a tail razem z head
//wyciąga tylko piaty wiersz końca bo pierwsze cztery head odcina
cat $1 | sort | nl >> $1
else
echo "trzeba podac 2 argumenty"
fi
exit 0
//ma wyciagnac wszystko z $2 i wstawiać do $1