Dwa wpisy wcześniej, przedstawiłem informacje na temat wykorzystania zmiennych. Tym razem chciałbym przedstawić zmienne specjalne, które pozwalają na wydobycie lub przekazanie pewnych danych w skryptach.
Zmienne specjalne
$0
Zacznij od zapoznania się ze zmienną, która pozwoli na pokazanie nazwy skryptu po jego wywołaniu, czyli $0.
1 2 |
#!/bin/bash echo "Nazwa biezacego skryptu: $0" |

$_
Parametr $_ pozwala na pokazanie ścieżki z jakiej ten skrypt został wykonany.
1 2 |
#!/bin/bash echo "Nazwa biezacego skryptu: $_" |
Wywołał powyższy skrypt na dwa sposoby.
1 |
./zmiennespecjalne.sh |
1 |
bash zmiennespecjalne.sh |
W wyniku otrzymasz dwa różne wyniki, pomimo tego, że wywołasz ten sam skrypt.


$1…$9
Kolejną zmienną, a raczej kolejnymi 9 zmiennymi, które działają tak samo są zmienne opisane jako $1…$9, które pozwalają na przekazanie tzw. parametrów do skryptu. Poniżej przykład przekazania jako parametru polecenia ls do skryptu.
1 2 |
#!/bin/bash echo "Przekazalem pierwszy parametr do skryptu: $1" |
W odpowiedzi zobaczysz pożądany wynik. Polecenie ls dodałem po prostu po nazwie wywołanego skryptu.

$@
Te 9 parametrów możesz zastąpić jednym, ale tylko wtedy gdy potrzebujesz przejąć hurtem wszystkie parametry, mam tutaj na myśli $@.
1 2 |
#!/bin/bash echo "Przekazalem 2 parametry do skryptu: $@" |
I tak zamiast wypisywania $1…$9 wpisz $@ a wynik będzie dokładnie taki sam.

$?
Takie dziwne coś czyli zmienna $? powoduje wypisanie statusu poprzedniego polecenia, jeżeli w odpowiedzi otrzymasz 0 tzn., że poprzednie polecenie wykonało się poprawnie, jeżeli pojawi się inna wartość (z reguły 1), poprzednie polecenie się nie wykonało.
Wykonaj taką serię poleceń:

I jak widzisz ponowne wykonanie skryptu zwróciło wartość 0, ale wykonanie polecenia cat brakpliku.txt (czyli pliku, którego nie ma) otrzymasz wartość 1, czyli błąd wykonania.
$#
Zastosowanie $# przydaje się głównie do sprawdzania warunków (o nich więcej w kolejnym wpisie), ale teraz krótki przykład.
Poniższy skrypt wyświetli informacje odnośnie liczby przekazanych parametrów i właśnie $# będzie wiedział ile ich skrypt otrzymał. Jeżeli użytkownik nie przekazał żadnego parametru otrzyma komunikat z pierwszego echo, jeżeli jakieś się pojawiły $@ pozwoli na ich wyświetlenie.
1 2 3 4 5 6 7 |
#!/bin/bash if [ $# -eq '0' ]; then echo "Do skryptu nie przekazano parametrów " else echo "Skrypt dostal takie parametry: $@" fi |

$$
Ostatnią zmienną będą $$, które pokażą PID (czyli ID procesu) bierzącej powłoki.

Podsumowanie
W tym wpisie poznałeś listę zmiennych specjalny, które jak widzisz często przydają się do pisania w miarę elastycznych skryptów, które mogą działać niezależnie od ilości wprowadzonych danych.