so:variables_substitutions
Różnice
Różnice między wybraną wersją a wersją aktualną.
| Poprzednia rewizja po obu stronachPoprzednia wersjaNowa wersja | Poprzednia wersja | ||
| so:variables_substitutions [2023/05/08 13:11] – [Oddzielanie, grupowanie poleceń] jkonczak | so:variables_substitutions [2026/05/06 19:01] (aktualna) – [Ćwiczenia] jkonczak | ||
|---|---|---|---|
| Linia 1: | Linia 1: | ||
| - | ===== Podstawy zmiennych środowiskowych | + | ====== Zmienne |
| - | ==== Czym są ==== | + | ==== Zmienne środowiskowe |
| Zmienne środowiskowe | Zmienne środowiskowe | ||
| - | ([[https:// | + | ([[https:// |
| - | to powiązany z procesem | + | to zbiór par nazwa – wartość |
| - | Nazwy zmiennych nie mogą zawierać znaku '' | + | Nazwy zmiennych nie mogą zawierać znaku '' |
| - | (z zakresu ASCII), cyfry i podkreślnik, oraz powinny zaczynać się od litery. | + | |
| - | \\ | + | |
| - | Częstym stylem jest używanie tylko znaków '' | + | |
| - | zmiennych. | + | |
| **Każdy proces ma osobny zbiór zmiennych środowiskowych.** | **Każdy proces ma osobny zbiór zmiennych środowiskowych.** | ||
| Linia 17: | Linia 13: | ||
| można wybrać czy kopiuje wszystkie zmienne środowiskowe rodzica, czy kopiuje | można wybrać czy kopiuje wszystkie zmienne środowiskowe rodzica, czy kopiuje | ||
| inny podany zbiór zmiennych. | inny podany zbiór zmiennych. | ||
| - | \\ | ||
| - | Powłoka dzieli swoje zmienne środowiskowe na te które zostaną przekazane | ||
| - | procesom potomnym (// | ||
| - | potomnym. | ||
| **Zmienne środowiskowe __nie__ są pomysłem powłoki, tylko systemu operacyjnego.** | **Zmienne środowiskowe __nie__ są pomysłem powłoki, tylko systemu operacyjnego.** | ||
| - | ==== Ustawianie | + | < |
| + | Programista ma dostęp do zmiennych środowiskowych praktycznie z każdego języka | ||
| + | programowania. | ||
| + | \\ | ||
| + | W językach C i %%C++%% jest to m. inn. funkcja | ||
| + | '' | ||
| + | |||
| + | W Linuksie można podejrzeć z jakimi zmiennymi środowiskowymi został uruchomiony | ||
| + | proces o identyfikatorze //pid// czytając plik '' | ||
| + | (por. '' | ||
| + | </ | ||
| + | |||
| + | ==== Zmienne w powłoce | ||
| + | |||
| + | Przy starcie, proces powłoki (zgodnej z POSIX) włącza do zbioru zmiennych | ||
| + | swoje zmienne środowiskowe. | ||
| + | \\ | ||
| + | Powłoka dzieli swoje zmienne na te które zostaną przekazane jako zmienne | ||
| + | środowiskowe procesom potomnym (// | ||
| + | przekazane procesom potomnym. | ||
| + | |||
| + | Nazwy zmiennych w powłoce mogą składać się z liter (z zakresu ASCII), cyfr i | ||
| + | podkreślnika, | ||
| + | zaleca się zaczynać od podkreślnika. | ||
| + | \\ | ||
| + | < | ||
| + | |||
| + | === Ustawianie | ||
| Ustawienie wartości zmiennej (i stworzenie jej, jeśli wcześniej nie istniała): | Ustawienie wartości zmiennej (i stworzenie jej, jeśli wcześniej nie istniała): | ||
| Linia 42: | Linia 61: | ||
| Uwaga: zwykle w powłoce pusta zmienna i nieustawiona zmienna zachowują się | Uwaga: zwykle w powłoce pusta zmienna i nieustawiona zmienna zachowują się | ||
| identycznie</ | identycznie</ | ||
| + | |||
| + | === Eksportowanie === | ||
| Domyślnie nowo tworzone zmienne nie są przekazywane do procesów potomnych. | Domyślnie nowo tworzone zmienne nie są przekazywane do procesów potomnych. | ||
| Linia 61: | Linia 82: | ||
| zmienną. | zmienną. | ||
| Bash pozwala na cofnięcie eksportowania zmiennej przez '' | Bash pozwala na cofnięcie eksportowania zmiennej przez '' | ||
| + | |||
| </ | </ | ||
| - | Aby zobaczyć listę wszystkich zmiennych | + | === Wypisywanie wszystkich zmiennych powłoki/ |
| - | '' | + | |
| - | powłoki.)). | + | Aby zobaczyć listę wszystkich zmiennych |
| + | '' | ||
| + | zachowanie | ||
| \\ | \\ | ||
| Aby zobaczyć listę eksportowanych zmiennych środowiskowych, | Aby zobaczyć listę eksportowanych zmiennych środowiskowych, | ||
| Linia 72: | Linia 96: | ||
| eksportowanych zmiennych.)). | eksportowanych zmiennych.)). | ||
| - | ==== (Najprostsze) odczytywanie wartości | + | === (Najprostsze) odczytywanie wartości === |
| Aby powłoka wstawiła w podane miejsce wartość zmiennej o nazwie ''// | Aby powłoka wstawiła w podane miejsce wartość zmiennej o nazwie ''// | ||
| Linia 85: | Linia 109: | ||
| ==== Wybrane standardowe zmienne ==== | ==== Wybrane standardowe zmienne ==== | ||
| - | |'' | + | |'' |
| |'' | |'' | ||
| + | |'' | ||
| + | |'' | ||
| + | |'' | ||
| |'' | |'' | ||
| - | |'' | ||
| |'' | |'' | ||
| - | |'' | + | |< |
| - | |'' | + | |
| - | |< | + | |
| |< | |< | ||
| |'' | |'' | ||
| - | Więcej w [[https:// | + | Więcej w [[https:// |
| ==== Ćwiczenia ==== | ==== Ćwiczenia ==== | ||
| Linia 115: | Linia 139: | ||
| ~~Zadanie.# | ~~Zadanie.# | ||
| - | ~~Zadanie.# | + | ~~Zadanie.# |
| - | tak, żeby zawierała ścieżki ''/ | + | (< |
| - | komendę '' | + | '' |
| - | + | Następnie spróbuj | |
| - | ===== Grupowanie poleceń i podstawienia ===== | + | ścieżki do tego programu</ |
| + | tak, żeby zawierała ścieżkę '' | ||
| + | komendę '' | ||
| + | ====== Grupowanie poleceń i podstawienia | ||
| - | Działanie powłoki ([[https:// | + | Działanie powłoki ([[https:// |
| - | |1. czyta linię| '' | + | |1. czyta linię| '' |
| - | |2. rozbija ją na tokeny i rozwiązuje aliasy| '' | + | |2. rozbija ją na tokeny |
| - | |3. **dzieli na komendy**|'' | + | |3. **dzieli na komendy** |'' |
| - | |4. **wykonuje podstawienia**| '' | + | |4. **wykonuje podstawienia**| '' |
| - | |5. ustawia przekierowania|'' | + | |5. ustawia przekierowania|'' |
| - | |6. uruchamia | + | |6. uruchamia |
| - | ==== Oddzielanie, | + | ===== Oddzielanie, |
| Polecenia można oddzielać przez: | Polecenia można oddzielać przez: | ||
| * '';'' | * '';'' | ||
| * ''&'' | * ''&'' | ||
| - | * operatory logiczne: | + | * operatory logiczne:< |
| - | | + | |
| - | | + | <li class=" |
| + | < | ||
| + | </ | ||
| + | </ | ||
| Polecenia można grupować przez: | Polecenia można grupować przez: | ||
| * '' | * '' | ||
| * '' | * '' | ||
| + | < | ||
| + | < | ||
| + | | ||
| Przykłady: | Przykłady: | ||
| * '' | * '' | ||
| Linia 163: | Linia 196: | ||
| '' | '' | ||
| - | ==== Podstawienia ==== | + | ===== Podstawienia |
| Podstawienia (//shell expansion// / //word expansion// | Podstawienia (//shell expansion// / //word expansion// | ||
| (pasującego do konkretnego wzorca) przez określoną wartość | (pasującego do konkretnego wzorca) przez określoną wartość | ||
| - | ([[https:// | + | ([[https:// |
| [[https:// | [[https:// | ||
| - | Dostępne podstawienia (w kolejności wykonywania przez BASH): | + | Dostępne podstawienia (w kolejności wykonywania przez Bash): |
| * '' | * '' | ||
| * '' | * '' | ||
| Linia 182: | Linia 215: | ||
| \\ | \\ | ||
| Wewnątrz pojedynczych cudzysłowów nie są wykonywane żadne podstawienia. | Wewnątrz pojedynczych cudzysłowów nie są wykonywane żadne podstawienia. | ||
| + | |||
| + | < | ||
| + | Wewnątrz pojedynczych cudzysłowów poprzedzonych znakiem dolara – '' | ||
| + | nie są wykonywane podstawienia, | ||
| + | odwrócony ukośnik takie jak np. '' | ||
| \\ | \\ | ||
| - | < | + | Takie zachowanie (dostępne od dawna w niektórych powłokach) zostało włączone do |
| - | wprowadzanie sekwencji poprzedzanych przez odwrócony ukośnik takich jak np. | + | standardu POSIX od 2024 roku. Szczegóły w [[https:// |
| - | '' | + | i najnowszym [[https:// |
| - | [[https:// | + | |
| </ | </ | ||
| Linia 194: | Linia 231: | ||
| '' | '' | ||
| - | === Zakres / lista – nawiasy wąsate === | + | ==== Zakres / lista – nawiasy wąsate |
| + | | | < | ||
| |liczby (lub litery) z podanego zakresu \\ < | |liczby (lub litery) z podanego zakresu \\ < | ||
| |::: | |::: | ||
| |::: | |::: | ||
| - | |::: | + | |::: |
| |wymienione po przecinkach elementy \\ < | |wymienione po przecinkach elementy \\ < | ||
| |::: | |::: | ||
| |::: | |::: | ||
| + | |||
| + | //Uwaga:// w Bashu to podstawienie jest wykonywane przed innymi, w tym np. | ||
| + | __przed__ podstawianiem wartości zmiennych. | ||
| + | \\ | ||
| + | Dlatego np. < | ||
| ~~Zadanie.# | ~~Zadanie.# | ||
| Linia 212: | Linia 255: | ||
| listy plików). | listy plików). | ||
| - | === Katalogi domowe === | + | ==== Katalogi domowe |
| |katalog domowy bieżącego użytkownika |**'' | |katalog domowy bieżącego użytkownika |**'' | ||
| |< | |< | ||
| + | |||
| + | Podstawienia '' | ||
| + | może być ścieżką zdaniem powłoki (i nie są wykonywane wewnątrz cudzysłowów). | ||
| + | < | ||
| + | i [[https:// | ||
| ~~Zadanie.# | ~~Zadanie.# | ||
| Linia 225: | Linia 273: | ||
| </ | </ | ||
| - | === Zmienne / parametry === | + | ==== Zmienne / parametry |
| Poza podstawianiem wartości zmiennej przez **'' | Poza podstawianiem wartości zmiennej przez **'' | ||
| - | **'' | + | **'' |
| + | \\ | ||
| + | Pozwala to np., na napisanie '' | ||
| Wyrażenie '' | Wyrażenie '' | ||
| Linia 247: | Linia 297: | ||
| ~~Zadanie.# | ~~Zadanie.# | ||
| - | polecenie które zmieni nazwę | + | polecenie które zmieni nazwę pliku wskazanego przez zmienną '' |
| + | koniec rozszerzenie '' | ||
| ~~Zadanie.# | ~~Zadanie.# | ||
| Linia 271: | Linia 322: | ||
| pliku wskazanego przez '' | pliku wskazanego przez '' | ||
| \\ | \\ | ||
| - | Następnie wypisz wartość '' | + | Następnie wypisz wartość '' |
| ~~Zadanie.# | ~~Zadanie.# | ||
| zmienną '' | zmienną '' | ||
| - | === Podstawianie wyników poleceń === | + | ==== Podstawianie wyników poleceń |
| Wyrażenia '' | Wyrażenia '' | ||
| Linia 282: | Linia 333: | ||
| Trzeba pamiętać że w linii ''// | Trzeba pamiętać że w linii ''// | ||
| wykonane polecenie ''// | wykonane polecenie ''// | ||
| - | '' | + | '' |
| Zaleca się używać składni '' | Zaleca się używać składni '' | ||
| Linia 309: | Linia 360: | ||
| </ | </ | ||
| - | ===== Arytmetyka | + | ==== Arytmetyka ===== |
| Powłoka wspiera obliczenia (przynajmniej) całkowitoliczbowe. \\ | Powłoka wspiera obliczenia (przynajmniej) całkowitoliczbowe. \\ | ||
| Standard POSIX definiuje tylko składnię '' | Standard POSIX definiuje tylko składnię '' | ||
| - | Bash dodatkowo posiada polecenie '' | + | Bash dodatkowo posiada |
| + | podane działania. | ||
| - | Wewnątrz '' | + | Wewnątrz '' |
| * pomijać '' | * pomijać '' | ||
| * używać operatora przypisania, | * używać operatora przypisania, | ||
| - | * zawartość '' | + | * zawartość '' |
| * wewnątrz '' | * wewnątrz '' | ||
| - | POSIX [[https:// | + | POSIX [[https:// |
| < | < | ||
| Linia 341: | Linia 393: | ||
| \\ • wypisze różnicę między '' | \\ • wypisze różnicę między '' | ||
| - | ===== Aliasy | + | ==== Aliasy ===== |
| - | Alias ([[https:// | + | Alias ([[https:// |
| słowo, które jeśli wystąpi w miejscu komendy, to zostanie zastąpione wcześniej | słowo, które jeśli wystąpi w miejscu komendy, to zostanie zastąpione wcześniej | ||
| ustalonym tekstem. | ustalonym tekstem. | ||
| Linia 374: | Linia 426: | ||
| \\ | \\ | ||
| Użyj tego aliasu. Użyj tego aliasu żeby wyświetlić kalendarz na rok 2025. | Użyj tego aliasu. Użyj tego aliasu żeby wyświetlić kalendarz na rok 2025. | ||
| - | |||
| - | ===== Wykonywanie poleceń z pliku ===== | ||
| - | |||
| - | ==== Tryb (nie)interaktywnym ==== | ||
| - | |||
| - | Powłoka uruchomiona bez argumentów działa w **trybie interaktywnym**. | ||
| - | \\ | ||
| - | Powłoka uruchomiona z nazwą pliku jako argumentem działa w **trybie nieinteraktywnym**. | ||
| - | |||
| - | W trybie interaktywnym powłoka czyta polecenia ze standardowego wejścia, w trybie | ||
| - | nieinteraktywnym z podanego pliku. | ||
| - | \\ | ||
| - | W trybie nieinteraktywnym powłoka nie wypisuje na ekran znaku zachęty i niektórych | ||
| - | komunikatów diagnostycznych. | ||
| - | |||
| - | ~~Zadanie.# | ||
| - | '' | ||
| - | |||
| - | ~~Zadanie.# | ||
| - | Ustaw uprawnienia wykonywania dla tego pliku (np. '' | ||
| - | Wykonaj ten plik przez '' | ||
| - | '' | ||
| - | Jaka powłoka wykonuje domyślnie skrypty? | ||
| - | |||
| - | ==== Shebang ==== | ||
| - | |||
| - | Jeżeli pierwsza linia pliku ''// | ||
| - | to uruchamiając ''// | ||
| - | ''// | ||
| - | \\ | ||
| - | Taka pierwsza linia ma nazwę [[https:// | ||
| - | (i jest respektowana zarówno przez powłoki, jak i np. jądro Linuksa). | ||
| - | \\ | ||
| - | **Shebang musi zaczynać się od pełnej ścieżki do pliku wykonywalnego** i powinien móc | ||
| - | zawierać opcje. | ||
| - | \\ | ||
| - | Jeśli plik ''// | ||
| - | to wykonanie ''// | ||
| - | |||
| - | ~~Zadanie.# | ||
| - | \\ • ''# | ||
| - | \\ • ''# | ||
| - | \\ • ''# | ||
| - | \\ • ''# | ||
| - | \\ Nadaj uprawnienia wykonania dla ''// | ||
| - | shebangiem). | ||
| - | |||
| - | Skrypty powłoki zawierają zwykle shebang **''# | ||
| - | jeśli skrypt korzysta z rozszerzeń Basha) i tradycyjnie nadaje im się rozszerzenie | ||
| - | **'' | ||
| - | \\ | ||
| - | W wielu językach skryptowych tradycyjnie używa się shebanga (np. python, perl, | ||
| - | ruby). | ||
| - | |||
| - | ~~Zadanie.# | ||
| - | na ekranie '' | ||
| - | |||
so/variables_substitutions.1683551460.txt.gz · ostatnio zmienione: (edycja zewnętrzna)