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?
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.
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.
Bash | Windows | Znaczenie |
---|---|---|
/ | \ | 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.