Moduł 11

Materiały do zajęć z Systemów operacyjnych prowadzonych na Wydziale Matematyki i Informatyki Uniwersytetu im. Adama Mickiewicza w Poznaniu.

« Wróć do spisu materiałów

Wiersz poleceń jako interpreter własnego języka

Zmienne w wierszu poleceń systemu Windows

Podobnie jak w przypadku powłoki Bash, w wierszu poleceń systemu Windows możemy wykorzystywać zmienne. Aby przypisać zmiennej określoną wartość tekstową, należy skorzystać z polecenia set. Odwołanie do zmiennej jest możliwe poprzez konstrukcję %zmienna%, gdzie zmienna jest nazwą odpowiedniej zmiennej.

Wykonaj następujące polecenia:

> set zmienna=dir
> %zmienna%
> set abc=%zmienna%
> %abc%

Czy sposób interpretacji zmiennych na poziomie wiersza poleceń systemu Windows przypomina Ci ten znany z powłoki Bash?

Wywołanie polecenia set z przełącznikiem /p pozwala na zapisanie w zmiennej wartości wprowadzonej przez użytkownika.

Wykonaj następujące polecenia:

> set /p x="Podaj polecenie: "
> %x%

Wywołanie polecenia set z przełącznikiem /a pozwala na wykonywanie operacji arytmetyczno-logicznych na zmiennych.

Korzystając z przełącznika /? polecenia set, zapoznaj się ze sposobem wykonywania działań arytmetyczno-logicznych na zmiennych. Przetestuj wybrane działania, ponieważ będą Ci potrzebne na następnych ćwiczeniach.

Dwie najważniejsze zmienne wiersza poleceń systemu Windows to PATH oraz PROMPT. Pierwsza z nich przechowuje, oddzielone znakiem średnika, ścieżki do katalogów, w których wiersz poleceń będzie poszukiwał poleceń zewnętrznych. Druga zaś przechowuje informację o wyglądzie znaku zachęty systemu Windows.

Wiersz poleceń systemu Windows jest wyposażony w polecenia o nazwach path oraz prompt. Służą one do ustawiania wartości zmiennych o odpowiadających im nazwach.

Korzystając z przełącznika /? poleceń path oraz prompt, zapoznaj się z ich opisem oraz sposobem ich wywołania.

Kolejną istotną zmienną wiersza poleceń jest zmienna errorlevel, która przechowuje status wyjścia ostatnio wykonanego polecenia.

Korzystając z pomocy polecenia set, zapoznaj się z nazwami i znaczeniem innych zmiennych środowiskowych o specjalnym przeznaczeniu.

Zmodyfikuj znak zachęty wiersza poleceń wykonując polecenie

> set prompt=[%computername%] $d$s$t$_$p$_$_$+$g

Sprawdź, czy taki sam efekt będzie miało wywołanie polecenia

> prompt [%computername%] $d$s$t$_$p$_$_$+$g

Jakiej nieznanej dotąd zmiennej tu użyliśmy? Dowiedz się, korzystając z polecenia wewnętrznego prompt /?, jakie elementy formatowania znaku zachęty można wykorzystać.

Polecenie echo

Znane nam już z systemów uniksopodobnych polecenie echo ma swój odpowiednik o tej samej nazwie również w wierszu poleceń. I choć sposób jego wywołania jest taki sam, to jednak efekt działania jest inny.

Wykonaj następujące polecenia:

> echo
> echo 1
> echo Ala ma kota
> echo  Ala  ma  kota
> echo "Ala ma kota"
> echo " Ala  ma  kota"
> set abc=kota
> echo "Ala ma %abc%"
> echo 'Ala ma %abc%"

Jakie wnioski można wyciągnąć z tego eksperymentu? Jak zachowywał się program echo w systemach uniksopodobnych? Jak były interpretowane wywołania zmiennych w cudzysłowach?

Przetestuj, jak zmienia się zawartość zmiennej środowiskowej errorlevel wraz z wykonywaniem kolejnych poleceń. Jeśli trzeba, wywołaj polecenia, które zakończą się błędem.

Jak wiersz poleceń interpretuje zmienne, które nie istnieją? Czy tak samo było w powłoce Bash?

Zobacz odpowiedź

Jak ciąg znaków otoczony symbolami procenta.

Wykonaj następujące polecenia:

> set zmienna=wartosc
> start cmd

a następnie w nowym oknie wywołaj polecenia

> echo %zmienna%

Czy zmienna zmienna jest dostępna w utworzonym oknie (inaczej, czy jest zmienną środowiskową)? Ustaw wartość dowolnej zmiennej w uruchomionym wierszu poleceń i sprawdź, czy da się do niej odwołać w macierzystym oknie.

Zobacz odpowiedź

Zmienne działają domyślnie tak jak zmienne środowiskowe.

Metasymbole wiersza poleceń

Wiersz poleceń systemu Windows daje wiele możliwości związanych z obsługą poleceń. Wiele metasymboli pokrywa się z tymi znanymi z powłoki Bash. W poniższej tabeli zaprezentowano ich porównanie.

BashWindowsZnaczenie
/\symbol oddzielający elementy struktury plików w ścieżce
..oznaczenie bieżącego katalogu
....oznaczenie katalogu nadrzędnego
\^symbol kontynuacji polecenia w następnej linii
**symbol dopasowania wzorca – dowolny ciąg znaków
??symbol dopasowania wzorca – jeden znak
>>przekierowanie strumienia wyjścia do pliku
>>>>przekierowanie strumienia wyjścia do pliku (z dopisaniem wyjścia na jego końcu)
<<przekierowanie zawartości pliku na strumień wejścia
||implementacja mechanizmu potokowania
$%symbol związany z oznaczeniem zmiennych
;&wykonywanie poleceń jedno po drugim
&&&&warunkowe wykonywanie poleceń – warunek i
||||warunkowe wykonywanie poleceń – warunek lub
()()grupowanie poleceń

Których metasymboli powłoki Bash brakuje w tabeli? Korzystając ze źródeł internetowych zweryfikuj, czy mają swoje odpowiedniki w wierszu poleceń systemu Windows.

Przetestuj działanie metasymboli związanych z warunkowym wykonywaniem poleceń.

Wprowadzenie do programowania wsadowego

Wykonywanie programów wsadowych

Program wsadowy (skrypt) wiersza poleceń systemu Windows to plik tekstowy (zwany plikiem wsadowym) zawierający polecenia powłoki systemu Windows, który może być wykonywany jak pełnoprawny program.

Plik wsadowy określony jest rozszerzeniem .bat lub .cmd. Wybór odpowiedniego rozszerzenia pliku ma jednak kluczowe znaczenie dla interpretacji zawartych w nim poleceń. Te zapisane w plikach o rozszerzeniu .cmd będą domyślnie wykonywane w osobnej instancji wiersza poleceń systemu Windows, podczas gdy te zapisane w plikach o rozszerzeniu .bat będą domyślnie wykonywane w maszynie wirtualnej systemu DOS. Ze względu na o wiele większe możliwości wiersza poleceń, nasze programy wsadowe będziemy zapisywać z rozszerzeniem .cmd.

Aby wykonać polecenia zawarte w pliku wsadowym, należy wywołać jego nazwę jako polecenie powłoki. W przypadku rozszerzeń elementów wykonywalnych, takich jak .exe, .bat, czy .cmd, rozszerzenie może zostać pominięte.

Jeśli odwołamy się do pliku z rozszerzeniem .bat w wierszu poleceń systemu Windows, to zostanie on wykonany w wierszu poleceń czy w maszynie wirtualnej systemu DOS? Dlaczego?

Zastanów się ponownie, dlaczego w skryptach powłoki Bash musieliśmy wprost określać wewnątrz pliku, jaki program ma go interpretować. Dlaczego w systemach z rodziny Windows nie musimy tego robić?

Utwórz skrypt skrypt.cmd o treści

echo %abc%

Następnie wykonaj w katalogu ze skryptem następujące polecenia:

> set abc=sprawdzam
> skrypt

Czy skrypt zachował się tak, jak można by się spodziewać?

Domyślnie wykonywanie plików wsadowych pociąga za sobą wypisanie na ekranie kolejnych wykonywanych poleceń. Aby powstrzymać to działanie dla jednego polecenia, należy poprzedzić je symbolem @. Można też zablokować to zachowanie globalnie, wykonując polecenie echo off. Jego przywrócenie jest natomiast możliwe poprzez wywołanie polecenia echo on. Polecenie echo wywołane bez argumentów zwróci natomiast informację o tym, w jakim stanie znajdujemy się obecnie.

Wykonaj polecenie echo off. Jak zachowuje się wiersz poleceń?

Skoro wywołanie polecenia echo z argumentami on/off nie powoduje wypisania na ekranie odpowiednich słów, to polecenie echo nie może służyć do ich wypisania. Aby to zmienić, należy rozdzielić nazwę polecenia od jej argumentu symbolem kropki, pisząc choćby echo.on.

Polecenia exit i rem

Program wsadowy wykonywany jest w osobnym procesie wiersza poleceń, a następnie zwraca do macierzystego wiersza poleceń status wyjścia (przechowywany w zmiennej środowiskowej %errorlevel%). Podobnie jak w przypadku skryptów powłoki Bash, możemy zakończyć skrypt wiersza poleceń systemu Windows w dowolnym momencie, wywołując polecenie exit.

Sprawdź, jak wywołać polecenie exit. Zapoznaj się z opisem i sprawdź w praktyce działanie przełącznika /B.

Interpreter wiersza poleceń systemu Windows nie interpretuje żadnego znaku specjalnego jako początku komentarza. W zamian za to udostępnia polecenie rem, które nie wykonuje żadnych działań, niezależnie od przekazanych argumentów. Tym samym możemy je wykorzystać do komentowania fragmentów kodu źródłowego skryptu wiersza poleceń, pisząc na przykład:

echo Ten napis sie wyswietli
rem A ten nie

Parametry pozycyjne i polecenie shift

Podobnie jak w powłoce Bash, do skryptów wiersza poleceń systemu Windows można przekazać parametry (zwane parametrami pozycyjnymi). Aby się do nich odwołać z wnętrza programu wsadowego, można użyć wywołań od %0 do %9. Zwróć uwagę na fakt, że odwołania te nie są związane z otoczeniem numeru argumentu symbolem procenta z obu stron.

Zmodyfikuj plik skrypt.cmd tak, aby był treści:

@echo off
rem Program wyswietla zawartosc zmiennych
echo '%1'
echo '%2'
echo '%3'

Zastanów się nad znaczeniem poszczególnych wierszy, szczególnie pierwszego. Następnie wykonaj następujące polecenia:

> skrypt a b c
> skrypt     a      b     c
> skrypt "a" "b" "c"
> skrypt "   a"     "b   " " c"

Skomentuj efekty.

Z wnętrza programu wsadowego możemy odwołać się jedynie do dziesięciu pierwszych elementów polecenia (parametrem o indeksie 0 jest w momencie wywołania programu wsadowego jego nazwa). Na szczęście argumenty znajdujące się na kolejnych miejscach nie giną i można się do nich odwoływać, wykorzystując polecenie shift o działaniu analogicznym do polecenia o tej samej nazwie, udostępnianego przez powłokę Bash.

Napisz program wsadowy, który wypisuje na ekranie wartość pierwszych 15 parametrów pozycyjnych. Upewnij się, że na ekranie pojawią się tylko one.