Skrypty część 3

Skrypty część 3

  1. Różnice między katalogami. Napisać skrypt, który przyjmuje dokładnie dwa katalogi (ozn. jako katalog1 i katalog2) jako argumenty. Skrypt wypisuje następujące informacje:

    • liczbę plików nazw plików, które występują w katalog1 i w katalog2 jednocześnie (nazwy, niekoniecznie zawartości)
    • liczbę nazw plików, które występują w katalog1 i nie występują w katalog2
    • liczbę nazw plików w katalog1 i katalog2, które są takie same i mają tę samą zawartość

    Użyteczny program: comm

  2. Podział katalogu na części: Skrypt przyjmuje 3 katalogi jako argumenty, ozn. dir1, dir2, dir3. W momencie wywołania dir2 i dir3 mają być puste (sprawdzić na początku skryptu). Skrypt dzieli pliki tak, że połowa plików z dir1 zostaje przeniesiona do dir2, a druga połowa do dir3. Wszystkie pliki w dir2 muszą być zmodyfikowane przed plikami z dir3. Gdy liczba plików jest nieparzysta, dir2 ma zawierać 1 plik mniej niż dir3.

  3. Podsłowa. Napisać skrypt który przyjmuje n słów jako argumenty. Dla każdej uporządkowanej pary słów (a,b) podanych jako argumenty sprawdzane jest czy a jest podsłowem b i wypisywany jest komunikat typu “a jest/nie jest podsłowem b”.

    A jest podsłowem b wtedy i tylko wtedy gdy b jest postaci “<niepusty ciąg znaków>a<niepusty ciąg znaków>”

  4. Skrypt wypisujący nazwy wszystkich użytkowników o uid>=50, posiadających literę o w nazwie.

    (getent, grep)

  5. Stemple czasowe. Napisać skrypt który zmienia nazwy wszystkich plików w katalogu podanym jako argument na nazwy postaci data.modyfikacji-stara.nazwa

  6. Zagrożone pliki. Napisać skrypt, który wypisuje nazwy wszystkich plików z podanego katalogu i podkatalogów, które mają ustawione prawo do zapisu dla wszystkich pozostałych (o).

  7. Wyszukiwanie skryptów. Napisać skrypt, który wypisuje nazwy wszystkich plików podejrzanych o bycie skryptami powłoki, znajdujących się w katalogu podanym jako parametr i jego podkatalogach.

    Pliki podejrzane mają dwie cechy: zawierają #!/bin/bash w pierwszej linii i mają ustawione prawo do wykonywania.

  8. Wszystkie grupy zadanych użytkowników. Napisać skrypt, który przyjmuje jeden parametr – nazwę pliku. Plik wejściowy zawiera oddzieloną spacjami listę nazw użytkowników. Należy wypisać na standardowym wyjściu wszystkie grupy, do których należy przynajmniej jeden z użytkowników z listy. Każdą z grup wypisać raz (bez powtórzeń).

    Podpowiedź: Warto mieć plik lub pliki tymczasowe.

  9. Uruchomienie programu, jeśli jeszcze nie działa. Skrypt przyjmuje co najmniej jeden argument. Pierwszy argument to nazwa programu do wywołania, kolejne do argumenty programu do wywołania.

    Skrypt sprawdza, czy w systemie jest już proces należący do bieżącego użytkownika o nazwie takiej samej jak program do wywołania. Jeśli tak – skrypt kończy ze statusem 127. W przeciwnym przypadku skrypt uruchamia program.

    Podpowiedź: można skorzystać z programu pgrep.

  10. Negacja kodu wyjścia. Skrypt przyjmuje co najmniej jeden argument. Pierwszy argument to nazwa programu do wywołania, kolejne do argumenty programu do wywołania. Skrypty wywołuje program z podanymi argumentami i sprawdza jego kod wyjścia. Jeśli jest to sukces, to skrypt kończy się ze statusem 1. 0 w przeciwnym przypadku.

  11. Konwersja zip -> tar.gz. Skrypt przyjmuje jeden lub dwa argumenty. Pierwszy argument to wejściowy plik .zip, drugi to wyjściowy plik .tar.gz. W przypadku gdy nie jest podany drugi argument, jako plik wyjściowy użyty jest plik o podobnej nazwie do pliku wejściowego, z rozszerzeniem .zip zamienionym na .tar.gz.

    Skrypt rozpakowuje archiwum .zip i ponownie pakuje je, tym razem do formatu .tar.gz.

    Archiwum musi mieć identyczną zawartość do wejściowe. Należy wziąć pod uwagę fakt, że w katalogu bieżącym mogą znajdować się inne pliki.

    Użyteczne programy: unzip, basename, mktemp, tar

    Podpowiedź: basename potrafi usunąć zadane rozszerzenie z nazwy pliku.