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
$ZMIENNA
– podstawienie bieżącej wartości zmiennej ZMIENNA${ZMIENNA}
– podstawienie bieżącej wartości zmiennej ZMIENNA przydatne gdy bezpośrednio po wartości zmiennej następuje tekst$(komenda)
– podstawienie stdout komendy~
– zastępowana ścieżką do katalogu domowegoWzorce 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>
W zamach tego ćwiczenia należy zapisywać do pliku o nazwie uf.<login>.<data>
kolejne efekty podstawień.
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
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
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
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}
Obejrzeć rezultat pracy:
$ less $PLIK
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)
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)