8
lut

Bash: Sprawdzanie liczby parametrów przesłanych do skryptu.

Bardzo często podczas pisania skryptów shellowych wykorzystywany jest interpreter bash – „Bourne-Again SHell”. Do jego skryptów, podobnie jak do zwykłych programów, możemy przekazać parametry wywołania. W dzisiejszym wpisie pokażę prosty sposób na odczytanie liczby tych parametrów i potencjalny sposób reakcji na związane z tym błędy.

Bash: Sprawdzanie liczby parametrów wejściowych.

Preferencje poszczególnych użytkowników są różne, ale bash to chyba najpopularniejsza powłoka systemowa dla systemów z rodziny GNU/Linux [ktoś się nie zgadza? nie słyszę? ;]]. Gdy uruchamiamy różne programy w konsoli, bardzo często widzimy, że zwracają one komunikaty błędów w przypadku nie dostarczenia wystarczającej liczby parametrów wywołania. Skrypty basha nie różnią się od nich pod tym względem – także pozwalają na przekazanie danych wejściowych, co tradycyjnie oznacza możliwość wystąpienia błędów w kolejnym miejscu.

Jeden z ciekawszych sposobów reagowania na niepoprawne wywołanie zawarty jest w programie tar, służącym do konsolowego tworzenia archiwów. W przypadku, kiedy nie zostaną przekazane do niego żadne informacje dotyczące plików, które ma spakować, „tchórząc, odmawia stworzenia pustego archiwum”:

tar -czf sth.tgz

tar: Cowardly refusing to create an empty archive
Try `tar –help’ or `tar –usage’ for more information.

Jak więc poradzić sobie z takim problemem w skrypcie basha?

Rozwiązanie: Zmienna $# i warunek if-then-fi.

Aby sprawdzić, ile argumentów zostało przekazanych do skryptu, należy użyć „magicznej” konstrukcji $#, oznaczającej rozmiar tablicy argumentów wejściowych [między nazwą zmiennej, znakiem równości a podstawianą wartością nie może być ani jednej spacji!]:

argc=$#

Zmienna argc będzie przechowywała wspomnianą liczbę.

Stwórzmy więc kolejną zmienną i podstawmy pod nią liczbę oczekiwanych parametrów [4]:

required=4

Na koniec wystarczy sprawdzić, czy liczby się zgadzają, i jeśli nie, wyświetlić błąd:

if [$argc -ne $required] then
  echo "[script] arg1 arg2 arg3 arg4"
  exit 1
fi

Możemy też oczywiście sprawdzić, czy przesłanych argumentów jest co najmniej tyle, ile potrzeba:

if [$argc -lt $required] then
  echo "[script] arg1 arg2 arg3 arg4"
  exit 1
fi

Mając tego typu zabezpieczenie możemy spać spokojnie – już nikt nie zrobi sobie krzywdy w naszym kodzie. A przynajmniej nie w ten sposób. ;]

Podsumowanie: Skrypty shellowe są… fajne. ;]

Dzisiejszy wpis był relatywnie prosty, aczkolwiek samo programowanie skryptów w bashu nie zawsze jest tak trywialne – składnia potrafi odstraszyć wielu zaawansowanych użytkowników komputerów. Nie zmienia to jednak faktu, że same skrypty shellowe to jedna z najpotężniejszych broni, jakiej możemy użyć „przeciwko” naszemu systemowi.

Tematykę tych skryptów wyciągam praktycznie zawsze na wierzch w rozmowach o teoretycznej wyższości „jedynego słusznego systemu” nad rodziną GNU/Linux. Do tej pory nikomu się nie udało obalić tego argumentu. ;]

Warto przeczytać.

Trwa ładowanie…

Subscribe without commenting

Wyszukaj:
Twitter
http://t.co/piYQJA2z /cc @merowing_ you'll like it :)
3 days ago
"It is about being polite, respectful and kind. That's the open source currency. Can't pay in these values? You shouldn't be using it."
4 days ago
Facebook
© Copyright 2010-2012 Tomasz Kowalczyk. All rights reserved. Created by Dream-Theme — premium wordpress themes. Proudly powered by WordPress.