Różnice między wybraną wersją a wersją aktualną.
| Both sides previous revision Poprzednia wersja Nowa wersja | Poprzednia wersja | ||
|
so:shell_constructs [2025/05/13 10:40] jkonczak [if] |
so:shell_constructs [2026/05/12 13:59] (aktualna) jkonczak |
||
|---|---|---|---|
| Linia 19: | Linia 19: | ||
| Ustaw uprawnienia wykonywania dla tego pliku (np. ''chmod +x //plik//''). | Ustaw uprawnienia wykonywania dla tego pliku (np. ''chmod +x //plik//''). | ||
| Wykonaj ten plik przez ''.%%/%%//plik//''. Potem uruchom inną powłokę (np. | Wykonaj ten plik przez ''.%%/%%//plik//''. Potem uruchom inną powłokę (np. | ||
| - | ''csh'' lub ''zsh'') i znów wykonaj ''.%%/%%//plik//''. | + | ''csh'', ''dash'' lub ''zsh'') i znów wykonaj ''.%%/%%//plik//''. |
| Jaka powłoka wykonuje domyślnie skrypty? | Jaka powłoka wykonuje domyślnie skrypty? | ||
| Linia 42: | Linia 42: | ||
| * ''#!/bin/ls -la'' | * ''#!/bin/ls -la'' | ||
| * ''#!/usr/bin/bat'' | * ''#!/usr/bin/bat'' | ||
| - | * ''#!/usr/bin/env cowsay'' | + | * ''#!/usr/bin/env rev'' |
| * ''#!/bin/rm'' | * ''#!/bin/rm'' | ||
| <html><div style="margin-top:-1.4em"></div></html> | <html><div style="margin-top:-1.4em"></div></html> | ||
| Linia 281: | Linia 281: | ||
| |''[ "$X" -gt "$Y" ]''|liczba ''"$X"'' jest większa ''"$Y"''| | |''[ "$X" -gt "$Y" ]''|liczba ''"$X"'' jest większa ''"$Y"''| | ||
| |''[ "$X" -ge "$Y" ]''|liczba ''"$X"'' jest większa bądź równa ''"$Y"''| | |''[ "$X" -ge "$Y" ]''|liczba ''"$X"'' jest większa bądź równa ''"$Y"''| | ||
| + | |||
| + | Uwaga: komenda ''test'' wykonująca porównanie arytmetyczne kończy się błędem | ||
| + | jeżeli którykolwiek z argumentów nie jest liczbą. \\ | ||
| + | <small> | ||
| + | Dlatego np. użycie do sprawdzenia argumentów | ||
| + | ''if [ "$1" -gt "$2" ]; then exit 1; fi'' da inny efekt niż | ||
| + | ''if ! [ "$1" -le "$2" ]; then exit 1; fi'' – dla argumentów będących liczbą obie | ||
| + | wersje działają tak samo, ale pierwsza przepuści też argumenty niebędące liczbą. | ||
| + | Zważ że ''!'' neguje komendę, a nie porównanie. | ||
| + | </small> | ||
| === Testy plików (wybór) === | === Testy plików (wybór) === | ||
| Linia 439: | Linia 449: | ||
| ''for NUM in $(seq -w 001 3)'' → ''for NUM in 001 002 003'' \\ | ''for NUM in $(seq -w 001 3)'' → ''for NUM in 001 002 003'' \\ | ||
| ''for USERNAME in $(getent passwd | cut -f1 -d:)'' → ''for USERNAME in root student ...'' \\ | ''for USERNAME in $(getent passwd | cut -f1 -d:)'' → ''for USERNAME in root student ...'' \\ | ||
| + | ''for FILE in "$DIR"/*'' → ''for FILE in 'my dir/file 1' 'my dir/file 2' 'my dir/subdir%%'%%'' \\ | ||
| ''for FILE in $(grep -il 'ldap' /etc/*.conf 2>/dev/null)'' → ''for FILE in /etc/autofs.conf /etc/ldap.conf ...''((Uwaga na spacje w nazwach plików! Ta wersja nie jest na nie odporna.)) | ''for FILE in $(grep -il 'ldap' /etc/*.conf 2>/dev/null)'' → ''for FILE in /etc/autofs.conf /etc/ldap.conf ...''((Uwaga na spacje w nazwach plików! Ta wersja nie jest na nie odporna.)) | ||
| Linia 550: | Linia 561: | ||
| ... | ... | ||
| done | done | ||
| - | </code> 1. ''polecenie'' jest wykonywane współbieżnie z pętlą \\ 2. wyniki polecenia mogą mieć spacje w linii |<code bash> | + | </code> 1. ''polecenie'' jest wykonywane współbieżnie z pętlą \\ 2. wyniki polecenia mogą mieć spacje w linii \\ <html><small>Uwaga: tylko jedna z komend z potoku (domyślnie pierwsza) działa <br> pierwszoplanowo, przez co przypisania zmiennych wewnątrz pętli <br> (działającej w tle) nie będą widoczne dalej w skrypcie</small><div style="margin-top: -1.4em"></div></html>|<code bash> |
| while read X Y | while read X Y | ||
| do | do | ||
| Linia 571: | Linia 582: | ||
| wczytanych liczb. | wczytanych liczb. | ||
| + | ~~Zadanie.#~~ | ||
| + | Napisz skrypt który odczytuje ze standardowego wejścia linie złożone z dwóch | ||
| + | liczb i po przeczytaniu każdej linii wypisuje iloczyn liczb z tej linii. | ||
| + | Skrypt ma działać do czasu aż odczytywanie z wejścia nie napotka końca pliku. | ||
| ==== select – rozszerzenie Basha ==== | ==== select – rozszerzenie Basha ==== | ||
| Linia 602: | Linia 617: | ||
| done | done | ||
| </code> | </code> | ||
| + | |||
| + | ===== [ekstra] Wbudowana pomoc w powłoce Bash ===== | ||
| + | |||
| + | Powłoka Bash (raczej jako wyjątek wśród powłok) oferuje wbudowane polecenie | ||
| + | ''[[https://www.gnu.org/software/bash/manual/html_node/Bash-Builtins.html#index-help|help]]'' | ||
| + | które wyświetla informacje na temat składni powłoki oraz wbudowanych w nią | ||
| + | poleceń. | ||
| + | |||
| + | ~~Zadanie.#~~ | ||
| + | Wykonaj polecenie ''help''. Następnie wykonaj polecenie ''help if''. \\ | ||
| + | Wyświetl informacje o podstawowych zmiennych powłoki poleceniem ''help'' – uwaga, | ||
| + | tłumacz nieszczęśliwie przetłumaczył potrzebne słowo kluczowe na polski. \\ | ||
| + | Sprawdź też co zwraca ''help %%'*'%%''. | ||
| + | |||