Skocz do zawartości

Polecenie Shift


katrinam

Rekomendowane odpowiedzi

if [ $1 = "-p" ] ; then

precision=$2

shift 2

 

Nie rozumiem co robi shift.

Podajesz liste parametrów do programu/skryptu np.
skrypt.sh p1 p2 p3 p4 p5 p6

W podanym przez Ciebie przykladzie brakuje oczywiscie jakies petli, która bedzie "obracala" tym if'em, ale zakladajac, ze taka petla (np. while) istnieje to zapierwszym razem jako pierwszy parametr ($1) zostanie wziete p1, jako drugi ($2) - p2. Poecenie shift 2 przesunie wskaznik o dwa miejsca i nastapi kolejny obrót petli tylko ze tym razem $1 bedzie równy p3, $2 = p4. Kolejna petla - kolejne przesuniecie w prawo, ale skryptowi "wydaje sie", ze wciaz pracuje z parametrami $1 i $2, chociaz przy trzecim obrocie $1 jest równy p5, a $2 = p6.

Metnie tlumacze, ale to trzeba po prostu spróbowac np.taki skrypt

while [ "$#" -gt "0" ] 
do
    echo $1; echo $2; echo "przesun o 2"
    shift 2
done

daje takie wyniki:

./abc.sh 1 2 a b p5 p6
1
2
przesun o 2
a
b
przesun o 2
p5
p6
przesun o 2

Jasniej nie dam rady :)

Odnośnik do komentarza
Udostępnij na innych stronach

A czy mozesz mi równie jasno wytlumaczyc "$@" i "$?"?
Moge pod warunkiem, ze odpowiadajac nie bedziesz w calosci cytowala posta na który odpowiadasz - zjamuje miejsce i do tego robi sie smietnik.

 

Jesli chodzi o $? sprawa jest prosta i tez najlepiej samemu spróbowac

/home/waldo > rm przykladowyplik; echo "Kod bledu:" $?
rm: przykladowyplik: A file or directory in the path name does not exist.
Kod bledu: 2
/home/waldo > touch przykladowyplik; echo $?
Kod bledu: 0

$? to kod bledu z wykonania ostatniej operacji. Jesli rózny od zera tzn. ze operacja zakonczyla sie niepowodzeniem a jak zero to wszystko bylo OK. W przykladzie na poczatku próbuje usunac nieistniejacy plik, wiec akcja konczy sie niepowodzeniem (kod bledu 2 jak sobie poszukasz oznacza wlasnie "A file or directory in the path name does not exist"). Potem zakladam ten plik. Mam uprawnienia do pisania w danym katalogu, wiec plik zakladam bez problemu, czyli wszystko jest OK - kod bledu = 0.

 

$@ - pokazuje wszystkie parametry przekazane do skryptu. Skrypt najprostszy z mozliwych

echo "Parametry skryptu: "$@

Wynik:

/home/waldo > ./skrypt.sh raz dwa trzy cztery 
Parametry skryptu: raz dwa trzy cztery

 

Ale to sa absolutne podstawy, które musisz sama pocwiczyc. Jest sporo stron na ten temat np. http://bash.wikidot.com/start

Odnośnik do komentarza
Udostępnij na innych stronach

Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto

Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.

Zarejestruj nowe konto

Załóż nowe konto. To bardzo proste!

Zarejestruj się

Zaloguj się

Posiadasz już konto? Zaloguj się poniżej.

Zaloguj się
×
×
  • Dodaj nową pozycję...