Poniższe zadania powinny być rozwiązane przy użyciu narzędzi systemu Unix (Solaris - diablo). Jeśli nie potrafisz napisać rozwiązania poprawnego na Uniksie, i udało Ci się jedynie uruchomić swoje rozwiązanie pod Linuksem - zaznacz to w raporcie. Takie rozwiązanie będzie tolerowane, choć w niektórych przypadkach może być niżej ocenione.

Przygotowanie do zajęć

Odśwież wiadomości o programie tr. Aby lepiej poznać możliwości tego programu, znajdź w necie zestaw najprostszych, podstawowych przykładów jego użycia. Następnie przypomnij sobie sposób wywołania i działanie programu sed.

Wykonanie ćwiczenia

Zad.1. (1 punkt - na zajęciach)
Wykorzystując program tr napisz skrypt zmien1 zamieniający duże litery na małe w nazwie pliku w katalogu bieżącym, danej jako argument wywołania.

Na przykład, wywołanie zmien1 Plik_14.txt powinno wykonać polecenie mv Plik_14.txt plik_14.txt

UWAGA: aby testować skrypty/programy zmieniające coś w sposób trwały, np. pliki w katalogu, konieczne jest stworzenie podkatalogu testowego, i w nim zestawu plików roboczych do testów. Przy wielokrotnym testowaniu trzeba nawet napisać pomocniczy skrypt, tworzący od nowa takie pliki testowe. Bez dokładnego przetestowania nigdy nie ma pewności czy tworzony skrypt będzie poprawnie działał.

Do tworzenia plików tymczasowych służy katalog /tmp w którym każdy użytkownik może tworzyć pliki i katalogi. Warto utworzyć tam własny katalog testowy, odciąć dostęp dla innych użytkowników, i tam ćwiczyć.

Zad.2. (1 punkt - na zajęciach)
Wykorzystując tr napisz skrypt zmien2, które zamieni wszystkie znaki niealfanumeryczne na znaki podkreślenia w nazwie pliku w katalogu bieżącym, danej jako argument wywołania.

WSKAZÓWKA: wykorzystaj opcję -c (complement).

Zad.3. (2 punkty - na zajęciach, lub 1 punkt - w domu)
Napisz skrypt zmien3, który dla wszystkich plików zadanych argumentami wywołania, jeśli nazwa pliku kończy się na .txt zamieni tę końcówkę na _org.txt, a jeśli nazwa pliku nie ma takiej końcówki to wyświetli komunikat o tym na wyjściu.
Do wygenerowania zmienionej nazwy pliku należy wykorzystać program sed w poleceniu zagnieżdżonym.
Do sprawdzenia czy nazwa pliku ma wymaganą końcówkę należy wykorzystać program expr.

Zad.4. (1 punkt - w domu)
Napisz skrypt arch1 który dla wszystkich plików z katalogu bieżącego o końcówce zadanej argumentem skryptu (np. .c) wykorzystując program sed wykona ich kopie w katalogu $HOME/.arch o nazwie z taką samą końcówką, ale z uzupełnieniem _arch do głównej części nazwy pliku. To znaczy, dla każdego znalezionego pliku o nazwie typu prog1.c skrypt wykona:

cp -p prog1.c $HOME/.arch/prog1_arch.c

Zad.5. (1 punkt - w domu)
Zapoznaj się z programem basename a następnie napisz skrypt arch2 działający tak samo jak arch1 tylko wykorzystujący basename zamiast sed-a.

Zastanów się, czy oba rozwiązania we wszystkich przypadkach będą działać dokładnie tak samo? Odpowiedź podaj w raporcie.

Materiały internetowe

Przykłady i tutoriale o tr:

Przykłady i tutoriale o sed:

Przykłady i tutoriale o expr:

Raport

Raport z wykonanego zadania powinien zawierać listę punktów zadania z adnotacją "WYKONANE", i ewentualnie, w razie potrzeby, z dodatkowymi uwagami. Skrypty opracowane do punktów 3, 4, i 5 proszę dołączyć jako oddzielne pliki o nazwach odpowiadających punktom zadania.
Zwróć uwagę, by skrypty nie zawierały odwołań do Twoich własnych katalogów, a operowały np. tylko na katalogu bieżącym (ub zadanym w zadaniu). W razie potrzeby utworzenia tymczasowego pliku roboczego, utwórz go w katalogu /tmp