Wzorce nazw plików, podstawienia

komenda > plik # kieruje stdout komendy do pliku
komenda >> plik # podobnie, przy czym wyjście jest dopisane
 do istniejącej treści
komenda < plik # przekierowuje stdin z pliku
komenda1 | komenda2 # stdout komendy1 trafia na stdin komedy2
komenda1 |& komenda2 # stdout i stderr komendy1 trafia na stdin komendy2
ZMIENNA=xyz # przypisuje wartość xyz do zmiennej ZMIENNA

Uwaga! nie można napisać spacji dookoła znaku = Jeśli wartość ma zawierać spacje, należy użyć cytowania

Wzorce nazw plików:

znak znaczenie
* dowolny ciąg znaków o długości 0 lub więcej
? dokładnie jeden dowolny znak
[acbxX1] dokładnie jeden znak ze zbioru podanego wewnątrz nawiasów
[a-z] [a-d] [0-3] [2-9] [A-Z] Zakresy znaków w formie skrótowej
[A-Za-z13] Kilka zakresów i elementów w jednym zbiorze
{ac,xyz,x} Dokładnie jeden z ciągów wymienionych po przecinku

Uwaga!! {} rozwija się do wszystkich wartości, nawet gdy pliki nie istnieją!
{ac,} – można podać również pusty ciąg znaków

W przypadku wątpliwości jak zostanie rozwinięty dany ciąg znaków przez shell, można najpierw wywołać

$ echo <ciąg>

i upewnić się, że rozwija zgodnie z przewidywaniami, przed wywołaniem

$ bardzo_destrukcyjna_komenda <ciąg>

Ćwiczenia

W zamach tego ćwiczenia należy zapisywać do pliku o nazwie uf.<login>.<data> kolejne efekty podstawień.

  1. Proste podstawienia

    Przypisać do zmiennej nazwę pliku, do którego będziemy dopisywać kolejne informacje, plik będzie nazwany uf.<login>.<data>:

    $ PLIK=~/uf.$USER.$(date +%Y-%m-%d)

    Za pomocą ls zapisać w pliku podstawowe informacje o swoim katalogu domowym:

    $ echo Zawartość katalogu domowego >> $PLIK
    $ ls -ld ~ >> $PLIK
  2. Sprawdzić co jest rozwijane jako pierwsze – wzorce nazw plików, czy zmienne:

    $ TEST="*"
    $ echo Test 1 wzorce nazw >> $PLIK
    $ echo Niecytowana wartość zmiennej TEST >> $PLIK
    $ echo $TEST >> $PLIK
    $ echo Cytowana wartość zmiennej TEST >> $PLIK
    $ echo "$TEST" >> $PLIK
    $ echo Co się stanie jak użyjemy pojedynczego cudzysłowu >> $PLIK
    $ echo '$TEST' >> $PLIK
  3. Sprawdzić co się dzieje ze spacjami – czy pierwszy jest dokonywany podział na słowa, czy podstawienie wartości zmiennych:

    $ TEST="a     b          c"
    $ echo Test 1 wzorce nazw >> $PLIK
    $ echo Niecytowana wartość zmiennej TEST >> $PLIK
    $ echo $TEST >> $PLIK
    $ echo Cytowana wartość zmiennej TEST >> $PLIK
    $ echo "$TEST" >> $PLIK
    $ echo Co się stanie jak użyjemy pojedynczego cudzysłowu >> $PLIK
    $ echo '$TEST' >> $PLIK
  4. Wzorce nazw

    Zapisać listę plików z katalogu /dev zaczynających sie na s

    $ echo Pliki z /dev zaczynające się na s >> $PLIK
    $ ls /dev/s* >> $PLIK

    Wykonać kopię pliku wyjściowego z rozszerzeniem kopia

    $ cp $PLIK{,.kopia}
  5. Obejrzeć rezultat pracy:

    $ less $PLIK

Ćwiczenia zaawansowane

  1. Utworzyć katalog task1 i skopiować do niego wszystkie pliki z /etc/ zawierające literę s w nazwie. Zaobserwować brak uprawnień. Czy problem z kopiowaniem jednego pliku spowodował rezygnację z kopii pozostałych?

    Wypisać wszystkie trzyliterowe nazwy plików w /etc

    Wypisać nazwy 10 ostatnio zmodyfikowanych plików w task1 Podpowiedzi:
    ls pozwala posortować według czasu modyfikacji
    można odpowiednio przefiltrować wynik ls

    Wypisać szczegółową listę (ls -l) 10 ostatnio zmodyfikowanych plików w task4. Wynik polecenia zapisać w pliku task1.lista (6p)

  2. W katalogu /proc znajdują się podkatalogi których nazwa jest identyfikatorem liczbowym.

    Wypisać wszystkie nazwy katalogów z /proc, które są liczbami parzystymi (zauważyć, że żadne inne nazwy w /proc nie kończą się cyfrą). (5p)

    Jak wyżej, wypisać wszystkie nazwy, które są liczbami trzycyfrowymi. (5p)

    Wypisać wszystkie nazwy podkatalogów /proc (7p)