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