Przekierowanie wejścia wyjścia: program ma trzy podstawowe strumienie wejścia-wyjścia - standardowe wejście - standardowe wyjście - standardowe wyjście diagnostyczne przekierowanie standardowego wyjścia ls -1>katalog.txt zapisze listę plików katalogu do pliku wc -l katalog.txt wypisze liczbę linii w pliku oraz jego nazwę na terminal wc -l katalog.txt >>katalog.txt - dopisze powyższą informacje do pliku przekierowanie standardowego wejścia ls -1>katalog.txt zapisze listę plików katalogu do pliku wc -l <katalog.txt wypisze liczbę linii w pliku na terminal wc -l <katalog.txt >>katalog.txt - możemy samą liczbę plików dopisać do pliku przekierowanie standardowego wyjścia diagnostycznego find / -name "sk*" -type f >pliki.txt 2>bledy.txt przekierowanie standardowego wyjścia i wyjścia diagnostycznego find. -name.txt >wszystko.txt 2>&1 przetwarzanie potokowe cat >imiona.txt ela hela ela stefan olek roman ^D sort <imiona.txt >posortowane.txt more posortowane.txt uniq <posortowane.txt >rozne.txt more rozne.txt wc -l <rozne.txt LUB sort imiona.txt uniq wc -l LUB sort <imiona.txt uniq wc -l LUB cat imiona.txt sort uniq wc -l LUB...
Pierwszy skrypt plik skryptu plik tekstowy #!/bin/bash #komentarz. echo Pierwszy skrypt echo Mój katalog domowy to $HOME nadanie praw wykonywania chmod u+x skrypt1.sh uruchomienie./skrypt1.sh Zmienne środowiskowe: ZMIENNA=123 set env export ZMIENNA set env echo $ZMIENNA read - czytanie ze standardowego wejścia: echo Podaj wartosc zmiennej read zmienna echo Podaj co najmniej 3 słowa read pierwsze drugie reszta echo Pierwsze słowo to $pierwsze echo Drugie slowo to $drugie echo A reszta to $reszta $HOME, $USER, $PATH, Argumenty skryptu: $1, $2,..., (dla więcej niż jednocyfrowych ${10}) $0 nazwa pliku skryptu, $@ - wszystkie argumenty $# - liczba argumentów shift przesunięcie argumentów tzn. wcześniejsze $2 teraz będzie $1, wcześniejsze $3 teraz będzie $2, itd.(też : shift 2) Wyświetlanie echo echo -e "\tlinia nr 1 \n\tlinia nr 2"
Obliczanie wartości wyrażeń: $[ ] SUMA=$[23+12] echo $SUMA SUMA=$[SUMA+3] echo $SUMA polecenie expr WYNIK=`expr 6 + 3` WYNIK=`expr $WYNIK \* 3` echo $WYNIK Wykorzystanie wyniku polecenia: `...` echo Moj katalog biezacy to `pwd` rm `find. -name "*.old"` echo `cat *.txt` - rozwija * IMIE=Karolina PODPIS=`echo "Pozdrawiam, $IMIE"` echo $PODPIS - rozwija $ZMIENNA Dodatkowe polecenia przydatne do zadań: grep wzorzec plik wyszukiwanie wzorca w pliku -i - bez rozróżniania wielkości liter -l - tylko nazwy plików -v - wyklucza wzorzec Wzorce: ^wzorzec - rozpoczynające się od wzorzec" [abc] - "a" lub "b" lub c wzorzec$ - kończące się na wzorzec cut - do wycinania fragmentu z każdej linii wejścia -c (znaki) -d (separator) -f (p) wc zliczanie w pliku : -c (bajty) -w (słowa) -l (linie)
sort sortowanie -n (numerycznie) -t (separator) -k (pozycja klucza) uniq usuwa powtarzające się wiersze () head, tail zwraca początkowe/końcowe n-linii -n (liczba linii) tr - zamiana lub usuwanie znaków tr -s " " " " zamienia ciągi spacji na pojedyncze spacje. Apostrofy/cudzysłowy (gdy chcemy używać napisów z odstępami): (zakładając, że wartością zmiennej IMIE jest ) apostrof ' echo -e '$IMIE \" *.txt' $IMIE \" *.txt cudzysłów echo -e "$IMIE \" *.txt" " *.txt możliwość zagnieżdżania lub \ (dosłowny cudzysłów) echo "Ala ' ma ' kota" echo "Ala \" ma \" kota" \$ - dosłowny $ \\ - dosłowny \ Zadania: 1. napisz skrypt, który zsumuje 4 liczby podane przez użytkownika, 2. napisz polecenie, które wypisze same rozmiary i nazwy plików w bieżącym katalogu, 3. napisz polecenie, które poda liczbę plików w bieżącym katalogu, 4. napisz polecenie, które wyszuka w pliku z kodem linie zawierające słowo while (wielkość liter nie ma znaczenia) wraz z numerami linii, 5. napisz polecenie, które wypisze różne czasy modyfikacji katalogów w katalogu domowym, 6. napisz polecenie, które wypisze nazwę pliku (lub katalogu), który został zmodyfikowany jako ostatni, 7. napisz skrypt, który z 8mej i 10-tej linii pliku podanego jako pierwszy argument utworzy plik o nazwie podanej jako drugi argument, 8. napisz skrypt, który wypisze rozmiar największego pliku w w bieżącym katalogu, 9. napisz polecenie, które wypisze listę loginów użytkowników wraz z ich numerami (uid) posortowane numerycznie wg uid,
10.napisz skrypt, które poda oddzielnie liczbę wszystkich katalogów i plików w katalogu domowym, 11. napisz polecenie, które poda pojemność największego zamontowanego systemu plików, 12. napisz skrypt, który wypisze łączną liczbę różnych linii we wszystkich plikach z rozszerzeniem.sh oraz wypisze te linie, które się nie powtarzają, 13.napisz polecenie, które wypisze wszystkie linie zawierające login użytkownika w plikach w katalogu bieżącym, 14.napisz skrypt, który wczyta od użytkownika liczbę n i wyświetli swój n-ty argument.