Kategorie szkoleń | Egzaminy | Kontakt
  • 1
  • 2
  • 165

Czy jest jakiś sposób na przetworzenie wszystkich argumentów wywołania skryptu shellowego, bez względu na to ile argumentów zostało podanych w wierszu poleceń? Załóżmy, że użytkownik może podać dowolną ilość argumentów i chcemy, żeby skrypt przetworzył je wszystkie.

Uczestnik szkolenia
  • Zapytał
  • @ Uczestnik szkolenia | 08.07.2013
Zaloguj się aby zadać pytanie
Pokrewne

Odpowiedź (1)

  • 3

Najprostszy sposób na przetworzenie wszystkich argumentów uruchamianego skryptu to połączenie pętli while z poleceniem shift. Jak wiadomo wszystkie argumenty wywołania skryptu podstawiane są kolejno pod zmienne specjalne: $1, $2, $3, $4, ... $n. Polecenie shift powoduje usunięcie pierwszego argumentu i przesunięcie pozostałych w lewo. Dotychczasowy argument $2 staje się więc argumentem $1, $3 staje się $2 itp. Wykorzystanie tego w praktyce wygląda tak:


#!/bin/sh

while [ $1 ]; do

echo $1
shift

done

Uruchomienie tego prostego skryptu z jakimiś argumentami wywołania, spowoduje wyświetlenie ich osobno w kolejnych liniach. Załóżmy, że nazwiemy skrypt arg.sh:

./arg.sh foo bar foobar

skrypt zwróci:

foo
bar

foobar

W takim wypadku pętla wykona się trzy razy (tyle jest argumentów) i za każdym jej przebiegiem będziemy mieli następującą sytuację:

Przebieg I

wartość $1: foo
wartość $2: bar
wartość $3: foobar

tutaj następuje wywołanie polecenia shift, pętla kończy pierwszy przebieg i zaczyna drugi:

Przebieg II

wartość $1: bar
wartość $2: foobar

wartość $3:

znowu shift i przesunięcie argumentów, po którym następuje trzeci przebieg pętli:

Przebieg III

wartość $1: foobar
wartość $2:

wartość $3:

i ostatnie wywołanie polecenia shift - argument pierwszy zostaje usunięty, nie ma już więcej argumentów do przesunięcia, więc zmienna $1 nie posiada żadnej wartości. Pętla while powinna zacząć swój czwarty przebieg, ale okazuje się, że warunek wywołania pętli nie jest już spełniany: while [ $1 ] - można odczytać jako "dopóki istnieje $1". $1 już nie istnieje, więc pętla kończy działanie nie wykonując czwartego przebiegu.

Jak łatwo zauważyć, bez względu na liczbę argumentów, pętla while wykona się odpowiednią ilość razy, czyli tyle ile będzie argumentów wywołania skryptu.

Oczywiście, zamiast linii "echo $1" w podanym wyżej przykładowym skrypcie, w pętli while możemy umieścić dowolny kod przetwarzający bieżący argument, dostępny pod zmienną $1.

  • Odpowiedział
  • @ | 08.07.2013
  • TRENER ALTKOM AKADEMII