Skryptowanie powłoki (bash)

Skrypt powłoki jest plikiem tekstowym zawierającym listę poleceń powłoki i jest wykonywany jak program w celu wykonania zadania lub zestawu zadań. Podstawowym celem skryptu powłoki jest automatyzacja zadań i oszczędność czasu. Ważne jest, by zrozumieć podstawową strukturę skryptu powłoki, ponieważ to użytkownik wchodzi w interakcję z klastrami obliczeniowymi poprzez skrypty powłoki (Zobacz następny rozdział o Grid Engine)

co to jest Bash?

W systemach uniksopodobnych dostępnych jest wiele różnych powłok. Bourne Again Shell (Bash) jest jedną z nich, jest to domyślna powłoka w systemach GNU/Linux. Ma ona pewne zalety w porównaniu z innymi powłokami i jest całkiem standardową powłoką, a my pokażemy jak używać jej do pisania skryptów poniżej.

Pisanie prostego skryptu powłoki bash

Podstawowy skrypt powłoki jest po prostu serią poleceń. To jest to, co pokażemy dalej.

Piszemy prosty skrypt, który wypisuje „hello world” na ekranie za pomocą polecenia echo. Zapiszemy plik tekstowy jako myScript.sh

 #!/bin/bash echo Hello World

wykonanie skryptu powłoki składnia:bash your-script-name. W naszym przypadku piszemy:

$ bash myScript.sh Hello World

bardziej skomplikowany przykład

Napiszmy nieco bardziej skomplikowany skrypt wykorzystujący więcej poleceń powłoki. Skrypt używa ls do listowania plików i używa polecenia wc -l, które zlicza liczbę linii w danym pliku lub standardowym wejściu. W tym przypadku, wc -l zlicza liczbę linii na wyjściu ls -l. Wszystko to osiągnęliśmy za pomocą pipe’a |.

Zawartość skryptu script.sh:

 #!/bin/bash echo here are the list of files ls -l echo The number of files: ls -l | wc -l 

Możemy go wykonać w następujący sposób:

$ bash script.sh

zmienne w skryptach basha

W skryptach basha można również używać zmiennych. Są one przydatne do przechwytywania danych wyjściowych poleceń pośrednich i używania ich do uruchamiania innych poleceń.Nie ma typów danych dla zmiennych. Zmienna w bashu może zawierać dowolny z następujących elementów: liczbę, znak lub ciąg znaków.

Nie musisz deklarować zmiennej, wystarczy, że przypiszesz wartość do jej referencji, aby ją utworzyć.

Teraz utworzymy prosty skrypt z jedną zmienną. Przypiszemy do tej zmiennej Hello world łańcuch znaków i wypiszemy tę zmienną z echo.

 #!/bin/bash VAR="Hello world" echo $VAR 

Przy przypisywaniu zmiennej nie użyliśmy znaku $, ale przy używaniu zmiennej musieliśmy użyć znaku $.

argumenty wiersza poleceń w skryptach basha

Skrypta mogą również przyjmować argumenty wiersza poleceń. Tutaj zmodyfikujemy skrypt wypisujący plik tak, aby przyjmował argument wiersza poleceń. Argumentem będzie ścieżka do katalogu.

zawartość skryptu2.sh:

 #!/bin/bash VAR= echo here are the list of files ls -l $VAR echo The number of files: ls -l $VAR | wc -l 

Oto jak uruchamiamy skrypt:

$ bash script2.sh /home/user/project

Argumenty są przechowywane w zmiennych z numerem w kolejności argumentu, zaczynając od 1

  • Pierwszy argument: $1
  • Second Argument: $2
  • i tak dalej…

W naszym przypadku odpowiada /home/user/project.

Operacje arytmetyczne w skryptach bash

Operacje arytmetyczne na liczbach całkowitych w bash są wykonywane w następującym formacie:

#!/bin/bash x=6 y=2 $((10 - 5)) $((x-y)) echo $((x-y)) echo $((10-5))

Możesz również skopiować i wkleić te polecenia do konsoli, aby zobaczyć, jak działają. Polecenia echo powinny wyprowadzić 4 i 5.

Arytmetyka Bash nie obsługuje zmiennoprzecinkowych (np. 1,3 -1 operacja nie będzie działać w bashu), musisz użyć polecenia bc. Zobacz ten przykład stackOverflow dla przykładu, jak użyć bc.

Pętla nad plikami

Jeśli próbujesz zautomatyzować zadanie używając skryptów bash, jest bardzo prawdopodobne, że będziesz musiał zastosować pewne polecenia na każdym pliku w katalogu. Można to osiągnąć za pomocą dzikich znaków* i pętli for. Poniższy skrypt zapisuje wszystkie pliki ’.txt’ z katalogu /path/to w zmiennej FILES. Następnie, dla każdego pliku oblicza liczbę linii i wypisuje ją poleceniem wc -l.

#!/bin/bash FILES=/path/to/*.txt for f in $FILES do echo "Processing $f file..." # count number of lines and output that for file $f wc -l $f done 

Więcej o skryptach bash

Możesz napisać jeszcze bardziej skomplikowane skrypty powłoki używając struktur kontrolnych (pętle if/else, for/while) i osiągnąć wiele używając skryptów powłoki, ale to jest poza zakresem tego dokumentu. Zobacz poniższe linki, jeśli chcesz się poprawić w pisaniu skryptów powłoki.

  • http://www.freeos.com/guides/lsst/
  • http://www.tldp.org/LDP/Bash-Beginners-Guide/html/

.

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany.