Środowisko

Najważniejsze skróty klawiaturowe (powtórka)

<←> i <→> kursor w przód/w tył

<↑> i <↓> poprzednia/następna komenda w historii komend

<tab> uzupełnianie nazwy plików, nazwy komendy

<tab><tab> w wypadku wielu możliwych dopasowań przy uzupełnianiu wyświetl listę możliwości

<ctrl> + c zabija aktywny proces (wysyła sygnał SIGQUIT)

<ctrl> + d znak końca pliku/strumienia (EOF)

<ctrl> + a lub home, kursor na początek lini

<ctrl> + e lub end kursor na koniec lini

<ctrl> + k usuń wszystko po kursorze

<ctrl> + i wyczyść ekran – równoznaczne z komendą clear

<ctrl> + <shift> + <insert> kopiuj zaznaczenie

<shift> + <insert> wklej

Przyjazne komendy

expr

Ewaluacja wyrazeń. (expression)

Dostepne operacje:

  • operacje arytmetyczne: * + - / %

  • porównania: > >= != = < <=

  • operacje boolowskie (Boolean): | &

    (wartości: 0 lub null – fałsz, wszystko inne – prawda)

  • operacje na stringach: match substr index length

expr 2 + 2

zwróci: 4

expr 0 | 1

błąd, dlaczego?

expr 0 > 1

co się stanie?

Zmienne i zmienne środowiskowe

nazwa_zmiennej=wartość

Przypisanie wartości zmiennej. Zmiennych nie trzeba deklarować.

a=5

przypisuje napis 5 do zmiennej a

a = 5

wywołuje komendę o nazwie a z dwoma argumentami: = i 5… czyli nie to co chcemy!

b=cośtam

przypisuje wartość cośtam do zmiennej b

c="coś innego"

przypisuje wartość coś innego do zmiennej b

$nazwa_zmiennej

Dostęp do zmiennej.

Jeśli zostanie wcześniej wykonane a=5 to co zostanie wypisane przez komendy:

echo a
echo $a
echo "$a"
echo '$a'
echo $zmienna_ktorej_nic_nie_przypisalem
set

Wypisuje wartości wszystkich zmiennych.

Przydatne zmienne środowiskowe. Sprawdź ich zawartość.

  • $PATH

  • $EDITOR

  • $PS1

  • $PWD

  • $USER

  • $LANG

export nazwa_zmiennej=wartość

Przypisanie wartości zmiennej do użytku w podprocesach.

export a=5

przypisuje wartość 5 do zmiennej a tak, że zmienna jest dostępna dla podprocesów.

Przykład:

x=5
export y=5
bash           # uruchomienie powłoki - podproces
echo "$x" "$y"

Command substitution

Przypisanie wyniku wykonania polecenia lub poleceń do aktualnie wykonywanego polecenia.

echo "2 + 2 =" expr 2 + 2"

wypisze na ekran 2 + 2 = expr 2 + 2

echo "2 + 2 =" `expr 2 + 2`"
  • wykona komendę expr 2 + 2

  • i wklei to co ta komenda wypisze na ekran (4)

  • jako argumenty do komendy echo

  • i wykona tą komendę (echo "2 + 2 =" 4)

result=`expr 2 + $a`

zapisze wynik wykonania komendy do zmiennej result

result=$(expr 2 + $a)

zalecana alternatywna składnia

result=$((3 * 4 + $a))

dodatkowa zalecana składnia do wykonywania operacji arytmetycznych (tylko liczby całkowite; bash nie wspiera operacji na liczbach zmiennoprzecinkowych)

Aliasy

alias NAME=CMD

nadaj komendzie CMD aliast NAME

Stan polecenia i łączenie komend

Lista poleceń

CMD1 ; CMD2

Wykonaj polecenie CMD1 a następnie polecenie CMD2

Stan wyjścia ostatnio wykonanego polecenia znajduje się pod zmienną $?. Jeśli 0, zakonczony poprawnie. W przeciwnym wypadku program zakończył się niepoprawnie.

Można ten fakt wykorzystać do łączenia komend.

Koniunkcja

CMD1 && CMD2

Wykonaj CMD1. Jesli CMD1 zostanie wykonane poprawnie, to wykonaj też CMD2.

Alternatywa

CMD1 || CMD2

Wykonaj CMD1. Jesli CMD1 nie zostanie wykonane poprawnie, to wykonaj CMD2.

Grupowanie

(CMD1; CMD2) && (CMD3; CMD4)

Zadania

  1. Sprawdź czy program cowsay jest zainstalowany, jeśli tak, to włącz przeglądarke internetową na adresie programu. [which]

  2. Sprawdź czy ktoś będzie reagował lepiej na określenie “developer” czy “hacker”: sprawdź czy ma w katalogu domowym więcej plików z z rozszerzeniem java czy py i wypisz na ekranie “developer” lub “hacker” (przykładowy katalog domowy: home.tar.gz – należy najpierw rozpakować). [find wc]

  3. Zmierz rzeczywisty czas wykonywania skryptu liar.sh w sekundach. Czas podawany przez program jest błędny. Podaj wartość błędu. [date expr]

  4. Ustaw zmienną środowiskową $OPEN_COUNT, która będzie inkrementowana za każdym razem kiedy użytkownik otworzy interpreter bash. [.bashrc]

  5. Utwórz alias o nazwie print dla komendy echo.

  6. Spraw, żeby przy każdym uruchomieniu bash wyświetlał krótkie powitanie i informację o tym która jest godzina. (np. Hi Bob. It's 17:59.) [ps wc echo ewentualnie: /etc/passwd]

  7. Napisz polecenie wywołujące skrypt infloop.sh w tle jako singleton: jeśli skrypt już się wykonuje, to wyswietl jego PID, w przeciwnym wypadku uruchom skrypt. [ps grep]

  8. Napisz polecenie które ustawia vim jako domyślny edytor w pliku .bashrc (ustaw odpowiednią zmienną na końcu pliku). Jeśli w pliku .bashrc jest już ustawiony domyślny edytor, to nie rób nic. Pamiętaj, że zmienna może być ustawiona ze słowem kluczowym export. Przed przystąpieniem do pracy zrób kopię zapasową pliku .bashrc. [expr wc echo]

  9. Napisz polecenie podjące numery linii pliku z kodem źródłowym ktore zawierają zakazane słowa. Lista zakazanych słów znajduje się w pliku bad_words.list. Przykładowy plik z kodem: Learner.java. [grep cat cut]

  10. Zmień string zachęty (prompt) interpretera bash w taki sposób żeby przypominał string zachęty z MS DOS (np. C:\\HOME\\INF77777>). [$PS1 tr]