WDI – zajęcia 12

BASH

1. użycie w command-line

2. użycie w skryptach

Ad.2

Przykładowy skrypt w pliku ‘plik.sh’:

#!/bin/bash
echo Hello World

Wywołujemy w command-line:

bash plik.sh 

 

Ad.1 – reszta ćwiczeń

Ćwiczenia

man komenda (np. man ls) – drukuje pomoc

Nawigacja po plikach

Przydatne komendy:

pwd – print working directory – drukuje nazwę bieżącego katalogu

ls – list – pokazuje zawartość katalogu

cd – change directory – zmiana katalogu

touch – tworzy nowy plik

echo – drukuje to co jest za tym

rm – remove – usuwa pliki lub foldery

mkdir – make directory – tworzy folder

less – wyświetla na ekranie początek pliku

cp – copy – kopiowanie

mv – move – przenosi pliki do innego katalogu LUB służy do zmieniania nazw

 

1. Upewnijmy się w jakim jesteśmy katalogu

pwd

2. Stwórzmy nasz katalog roboczy

mkdir roboczy

3. Wejdźmy do tego katalogu

cd roboczy

4. Stwórzmy w nim pliki: testowy.txt i testowy2.txt

touch testowy.txt testowy2.txt

5. wydrukujmy na ekranie tekst ‘To jest moj tekst’

echo ‘To jest moj tekst’

6. Teraz zapiszmy ten tekst do pliku testowy.txt

echo ‘To jest moj tekst’ > testowy.txt

Symbol > oznacza przekierowanie output’u danej funkcji do pliku.

7. sprawdźmy czy tekst się zapisał:

sposób 1:

gedit testowy.txt

sposób 2:

less testowy.txt

8. Można na raz zapisać cos do pliku tworząc go od nowa (omijając komendę touch):

echo ‘To jest moj nowy tekst’ > drugi_plik_testowy.txt

9. Teraz zobaczmy jaka jest zawartość naszego katalogu roboczego:

ls

10. Rozmaite komendy w bashu mają wiele dodatkowych opcji. Więcej o nich możemy się dowiedzieć wpisując: man dana_komenda np. man ls

man ls

11. Spróbujmy i zobaczmy co zostanie wypisane:

ls -l

12.

ls l -S

13. Różne komendy możemy używać nie tylko dla katalogu, w którym się znajdujemy, ale także dla innego, np. dla katalogu o jeden poziom wyżej.

Katalog o 1 poziom wyżej uniwersalnie oznacza się poprzez 2 kropki ..

Katalog domowy (najwyższy poziom) oznacza się poprzez kropkę .

Zobaczmy teraz jaka jest zawartość katalogu jeden poziom wyżej niż ‘roboczy’:

ls ..

14. Teraz stwórzmy nowy katalog “moj_katalog”, na tym samym poziomie co roboczy:

mkdir ../moj_katalog

15. I skopiujemy plik testowy.txt z katalogu roboczy do moj_katalog:

cp testowy.txt ../moj_katalog

16. Następnie przeniesiemy plik testowy2.txt z katalogu roboczy do moj_katalog:

mv testowy2.txt ../moj_katalog

17. Sprawdźmy czy testowy.txt się skopiował, a testowy2.txt przeniósł:

ls ../moj_katalog

18. Teraz użyjemy tej samej komendy mv do zmiany nazwy pliku!

mv ../moj_katalog/testowy2.txt, ../moj_katalog/plik_o_nowej_nazwie.txt

Równie dobrze moglibyśmy najpierw przejść do katalogu moj_katalog:

cd ../moj_katalog

I wtedy użyć krótszej komendy:

mv testowy2.txt plik_o_nowej_nazwie.txt

19. Na koniec sprawdźmy jaka jest zawartość nowego katalogu:

ls ../moj_katalog

20. Ponieważ nie są nam one do niczego potrzebne to je usuniemy:

rm ../moj_katalog

21. Bash zwraca błąd ponieważ komenda rm domyślnie usuwa pliki. Można usunąć katalog za pomocą dodatkowej flagi -d (directory), ale musi być on pusty. Żeby usunąć katalog wraz z zawartością musimy użyć flagi -r (recursive):

rm -r ../moj_katalog

oraz

cd ..

rm -r roboczy

22. Teraz gdy sprawdzimy zawartość katalogu poziom wyżej od roboczego zobaczymy że katalogów ‘moj_katalog’ oraz ‘roboczy’ już nie ma.

ls

Ćwiczenie samodzielne

Stworzyć katalogi wg poniższego schematu, używając komend w bashu. Katalog moj_katalog ma zwierać plik tekst.txt  (tekst – link do pliku) i katalog osoby. Ten katalog zaś ma zawierać katalogi telefony i adresy, które mają zawierać pokazane na schemacie pliki. Do tych plików proszę wpisać dowolną treść przypominającą odpowiednio numer telefonu lub adres. (Wykorzystamy to w późniejszych ćwiczeniach).

Przydatne info:

Komendy takie jak cp czy mv rozpoznają następujące znaki:

* wszelkie pliki

g* pliki o dowolnych nazwach rozpoczynających się na g

b*.txt pliki o dowolnych nazwach rozpoczynających się na b i kończących .txt

c??? pliki o nazwach rozp. c i zawierających potem dokladnie 3 znaki

[cde]* pliki o nazwach rozp. się na c lub d lub e i dowolnych znakach potem.

Operacje na tekstach

Przydatne komendy:

grep – (skrót od global regular expression print) – wyszykuje podane wyrażenie regularne i wyświetla linie, w których ono wystąpiło

cut – wyciąga fragmenty każdej linii pliku

cat – concatenate – łączy zawartość plików jeśli jest podana nazwa pliku z wynikiem. Jeśli nie to drukuje na ekranie zawartość pliku podanego.

sort – służy do sortowania różnych rzeczy, np linii w tekście, plików itd.

 

1. Wejdźmy do katalogu moj_katalog, (w którym jest ściągnięty plik ‘tekst.txt’).

2. Wyszukajmy linie w tekście, które zawierają cyfrę ‘1’

grep 1 tekst.txt

3. Wyszkujamy linie w tekście, które zawierają dowolne cyfry.

grep [[:digit:]] tekst.txt

4. Wyszukajmy linie, które zawierają literę ‘i’

grep i tekst.txt

5. Wyszukajmy linie, które zawierają słowo ‘i’

grep -w i tekst.txt

6. Samodzielnie proszę wyszukać w tekście linie, które nie zawierają słowa ‘i’. (Trzeba skorzystać z manuala: man grep)

7. Samodzielnie napisać komendę, która poda liczbę linii nie zawierających słowa ‘i’.

8. Teraz chcemy wyciągnąć od 4-tego do 10-tego znaku z każdej linii naszego pliku.

cut -c 4-10 tekst.txt

9. Proszę teraz zrobić to samo, tylko zapisać do pliku output.txt

10. Żeby przećwiczyć wybieranie poszczególnych kolumn ściągnijmy plik temperatury.txt (temperatury – link) i na nim wypróbujmy komendę:

sort -n -k2 -t$’\t’ temperatury.txt

11. Wybranie nazw miast/regionów z tego pliku (tych rzeczy w nawiasach):

cut -f 1 temperatury.txt | cut -f2 -d’ ‘ -s
opcja -s żeby nie wypisywał linii, gdzie w ogóle nie ma separatora.

12. Powiedzmy, że chcemy złączyć treść plików ilona_tel.txt i julia.txt i wydrukowac na ekranie. Napisz komendę.

Pipes, czyli potoki

Output danej komendy (stdout) zamiast drukować na ekranie można przekierować od razu do następnej komendy (stdin). Robi się to za pomocą potoków, tj. znaku: |

Przykłady:

1. Z pliku tekst.txt chcemy wyciągnąć jedynie znaki od 20 do 80 w każdej linii, znaleźć tylko te linie, które zawierają słowo ‘tylko’, a następnie usunąć powtarzajace się linie:

cut -c 20-80 tekst.txt | grep tylko | uniq

Leave a Reply

Your email address will not be published. Required fields are marked *