Termin "skrypty powłoki" często pojawia się na forach Linux, ale wielu użytkowników go nie zna. Nauka tej prostej i wydajnej metody programowania może pomóc Ci zaoszczędzić czas, lepiej nauczyć się wiersza poleceń i wyeliminować żmudne zadania zarządzania plikami.
Bycie użytkownikiem systemu Linux oznacza, że grasz przy użyciu wiersza polecenia. Czy podoba Ci się to, czy nie, są tylko niektóre rzeczy, które są wykonywane o wiele łatwiej za pomocą tego interfejsu niż przez wskazywanie i klikanie. Im więcej używasz i uczysz się wiersza poleceń, tym bardziej widzisz jego potencjał. Cóż, sama linia poleceń to program: powłoka. Większość dystrybucji Linuksa dziś używa Basha i właśnie do tego w rzeczywistości wprowadzasz komendy.
Niektórzy z was, którzy używali systemu Windows przed korzystaniem z systemu Linux, mogą pamiętać pliki wsadowe. Były to małe pliki tekstowe, które można było wypełnić poleceniami do wykonania, a system Windows uruchamiał je po kolei. To był sprytny i zgrabny sposób na zrobienie pewnych rzeczy, na przykład uruchamianie gier w licealnym laboratorium komputerowym, kiedy nie można było otworzyć folderów systemowych lub utworzyć skrótów. Pliki wsadowe w systemie Windows, choć przydatne, są tanią imitacją skryptów powłoki.
Skrypty powłoki pozwalają nam na programowanie poleceń w łańcuchach i sprawiają, że system wykonuje je jako wydarzenie skryptowe, podobnie jak pliki wsadowe. Pozwalają również na znacznie bardziej użyteczne funkcje, takie jak zastępowanie poleceń. Możesz wywołać polecenie, takie jak data, i użyć jego danych wyjściowych jako części schematu nazywania plików. Możesz zautomatyzować kopie zapasowe, a każdy skopiowany plik może mieć dołączoną aktualną datę na końcu nazwy. Skrypty to nie tylko wywołania poleceń. Są to programy same w sobie. Skrypty umożliwiają korzystanie z funkcji programowania - takich jak pętle "dla", instrukcje if / then / else i tak dalej - bezpośrednio w interfejsie systemu operacyjnego. I nie musisz uczyć się innego języka, ponieważ używasz tego, co już znasz: wiersza poleceń.
To naprawdę jest moc skryptów, jak sądzę. Możesz programować za pomocą poleceń, które już znasz, ucząc się zszywek większości głównych języków programowania. Potrzebujesz zrobić coś powtarzalnego i nużącego? Skryptuj to! Potrzebujesz skrótu do naprawdę skomplikowanego polecenia? Skryptuj to! Chcesz zbudować naprawdę łatwy w użyciu interfejs wiersza poleceń? Skryptuj to!
Zanim zaczniemy naszą serię skryptów, omówmy kilka podstawowych informacji. Będziemy używać powłoki bash, której większość dystrybucji Linuksa używa natywnie. Bash jest dostępny również dla użytkowników Mac OS i Cygwin w systemie Windows. Ponieważ jest tak uniwersalny, powinieneś być w stanie pisać niezależnie od platformy. Ponadto, dopóki istnieją wszystkie polecenia, do których istnieją odnośniki, skrypty mogą działać na wielu platformach z niewielkim lub zerowym wymaganiem.
Skrypty mogą z łatwością korzystać z uprawnień administratora lub superużytkownika, dlatego najlepiej przetestować skrypty przed ich uruchomieniem. Używaj też zdrowego rozsądku, na przykład upewniając się, że masz kopie zapasowe plików, na których zamierzasz uruchomić skrypt. Bardzo ważne jest również użycie odpowiednich opcji, takich jak -i dla polecenia rm, aby interakcja była wymagana. To może zapobiec nieprzyjemnym błędom. Jako takie, czytaj skrypty, które pobierasz i bądź ostrożny z posiadanymi danymi, na wszelki wypadek.
Zasadniczo skrypty to zwykłe pliki tekstowe. Możesz użyć dowolnego edytora tekstów, aby je zapisać: gedit, emacs, vim, nano ... Ta lista jest długa. Po prostu zapisz go jako zwykły tekst, a nie jako tekst sformatowany lub dokument Word. Ponieważ uwielbiam łatwość użycia, którą zapewnia nano, będę tego używać.
Skrypty są wykonywane jak programy, a aby tak się stało, muszą mieć odpowiednie uprawnienia. Można wykonać skrypty wykonywalne, uruchamiając na nim następujące polecenie:
chmod + x ~ / somecrazyfolder / script1
To pozwoli każdemu uruchomić ten konkretny skrypt. Jeśli chcesz ograniczyć jego użycie tylko do swojego użytkownika, możesz użyć tego:
chmod u + x ~ / somecrazyfolder / script1
Aby uruchomić ten skrypt, musisz przejść do odpowiedniego katalogu, a następnie uruchomić skrypt w następujący sposób:
cd ~ / somecrazyfolder
./script1
Aby było wygodniej, możesz umieścić skrypty w folderze "bin" w swoim katalogu domowym:
~ / bin
W wielu nowoczesnych dystrybucjach ten folder nie jest już domyślnie tworzony, ale można go utworzyć. Zazwyczaj jest to miejsce przechowywania plików wykonywalnych, które należą do użytkownika, a nie do innych użytkowników. Umieszczając tutaj skrypty, możesz po prostu je uruchamiać, wpisując ich nazwę, podobnie jak inne polecenia, zamiast zmuszać cd do korzystania z prefiksu "./".
Zanim jednak nazwiesz skrypt, powinieneś wykonać następujące polecenie, aby sprawdzić, czy masz zainstalowany program używający tej nazwy:
który [polecenie]
Wiele osób nazywa swoje wczesne skrypty "testem", a kiedy próbują uruchomić go w linii poleceń, nic się nie dzieje. Dzieje się tak, ponieważ powoduje konflikt z poleceniem testowym, które nie robi niczego bez argumentów. Zawsze upewnij się, że twoje nazwy skryptów nie kolidują z poleceniami, w przeciwnym razie możesz robić rzeczy, których nie zamierzasz robić!
Jak wspomniałem wcześniej, każdy plik skryptu jest zasadniczo zwykłym tekstem. To nie znaczy, że możesz napisać to, co chcesz, wszyscy chcąc nie chcąc. Gdy próbuje się wykonać plik tekstowy, powłoki będą analizować je pod kątem wskazówek, czy są to skrypty, czy nie i jak poprawnie obsłużyć wszystko. Z tego powodu istnieje kilka wskazówek, które musisz znać.
Hash-Bang Hack
Kiedy powłoka analizuje plik tekstowy, najbardziej bezpośrednim sposobem identyfikacji pliku jako skryptu jest wykonanie pierwszej linii:
#! / bin / bash
Jeśli używasz innej powłoki, zastąp jej ścieżkę tutaj. Linie komentarza zaczynają się od skrótów (#), ale dodanie huku (!) I ścieżki powłoki po hakowaniu, które ominie tę regułę komentarza i zmusi skrypt do wykonania z powłoką, na którą wskazuje ta linia.
Nowa linia = nowe polecenie
Każda nowa linia powinna być traktowana jako nowa komenda lub element większego systemu. Na przykład instrukcje / / else przejmą wiele linii, ale każdy składnik tego systemu znajduje się w nowej linii. Nie pozwól, aby polecenie spadło do następnego wiersza, ponieważ może to spowodować obcięcie poprzedniego polecenia i błąd w następnym wierszu. Jeśli twój edytor tekstu to robi, powinieneś wyłączyć opcję zawijania tekstu, aby była bezpieczna. Możesz wyłączyć zawijanie tekstu w nano-bitowym uderzeniu ALT + L.
Komentarz Często z #s
Jeśli zaczniesz linię z #, linia zostanie zignorowana. Przekształca to w linię komentarza, w której możesz przypomnieć sobie, co było wynikiem poprzedniego polecenia lub co zrobi następne polecenie. Ponownie wyłącz zawijanie tekstu lub podziel komentarz na wiele linii, które zaczynają się od haszu. Używanie wielu komentarzy jest dobrą praktyką do zachowania, ponieważ pozwala tobie i innym osobom łatwiej modyfikować twoje skrypty. Jedynym wyjątkiem jest wyżej wymieniony hak Hash-Bang, więc nie używaj opcji #s with! S. ;-)
Polecenia są otoczone nawiasami
W starszych dniach podstawienia komend dokonywane były za pomocą pojedynczych znaczników (", dzieli się klawiszem ~). Nie będziemy tego jeszcze dotykali, ale ponieważ większość ludzi wyrusza na poszukiwanie podstaw, dobrym pomysłem jest wspomnieć, że zamiast tego należy użyć nawiasów. Dzieje się tak głównie dlatego, że podczas zagnieżdżania - umieszczania poleceń w innych komendach - nawiasy działają lepiej.
Zacznijmy od prostego skryptu, który pozwala kopiować pliki i dołączać daty na końcu nazwy pliku. Nazwijmy to "datecp". Najpierw sprawdźmy, czy ta nazwa jest w konflikcie z czymś:
Możesz zobaczyć, że nie ma wyjścia z którego polecenia, więc jesteśmy gotowi używać tej nazwy.
Stwórzmy pusty plik w folderze ~ / bin:
touch ~ / bin / datecp
A teraz zmieńmy pozwolenie, zanim zapomnimy:
Zacznijmy więc budować nasz skrypt. Otwórz ten plik w wybranym edytorze tekstu. Tak jak powiedziałem, lubię prostotę nano.
nano ~ / bin / datecp
I, chodźmy naprzód i wprowadź warunek wstępny pierwszej linii oraz komentarz na temat tego, co robi ten skrypt.
Następnie zadeklaruj zmienną. Jeśli kiedykolwiek brałeś algebrę, prawdopodobnie wiesz, co to jest. Zmienna pozwala nam przechowywać informacje i robić z nim różne rzeczy. Zmienne mogą "rozszerzać się", gdy są przywoływane gdzie indziej. Oznacza to, że zamiast wyświetlać swoją nazwę, będą wyświetlać swoją zapisaną zawartość. Możesz później powiedzieć tę samą zmienną, aby przechowywać różne informacje, a wszelkie instrukcje, które nastąpią po niej, wykorzystają nowe informacje. To naprawdę ciekawy symbol zastępczy.
Co zmienimy? Cóż, przechowujmy datę i godzinę! Aby to zrobić, zadzwonimy do komendy date.
Rzuć okiem na poniższy zrzut ekranu, aby dowiedzieć się, jak zbudować wyjście polecenia date:
Możesz to zobaczyć, dodając różne zmienne zaczynające się od%, możesz zmienić wyjście polecenia na to, co chcesz. Aby uzyskać więcej informacji, możesz zajrzeć na stronę podręcznika dla polecenia date.
Użyjmy ostatniej iteracji polecenia date, "date +% m_% d_% y-% H.% M.% S", i użyj tego w naszym skrypcie.
Gdybyśmy mieli teraz zapisać ten skrypt, moglibyśmy go uruchomić i dałoby nam dane wyjściowe polecenia date, jak można by się spodziewać:
Ale, zróbmy coś innego. Podajmy nazwę zmiennej, np. Date_formatted do tego polecenia. Odpowiednia składnia tego jest następująca:
variable = $ (argumenty -options polecenia)
I dla nas zbudowaliśmy to tak:
date_formatted = $ (data +% m_% d_% y-% H.% M.% S)
To nazywamy substytucją poleceń. Zasadniczo mówimy bashowi, że gdy pojawi się zmienna "date_formatted", uruchom polecenie wewnątrz nawiasów. Następnie, niezależnie od tego, jakie dane wyjściowe wyda komenda, powinno być wyświetlane zamiast nazwy zmiennej "date_formatted".
Oto przykładowy skrypt i jego wynik:
Zwróć uwagę, że na wyjściu znajdują się dwie spacje. Zostanie wyświetlona spacja w cudzysłowie komendy echo i spacja przed zmienną. Nie używaj spacji, jeśli nie chcesz, aby się pojawiły. Zauważ też, że bez tej dodanej linii "echo" skrypt nie dałby absolutnie żadnego wyniku.
Wróćmy do naszego skryptu. Dodajmy następnie część kopiującą polecenia.
cp -iv $ 1 $ 2. $ data_formatted
Spowoduje to wywołanie polecenia kopiowania z opcjami -i i -v. Pierwszy z nich poprosi o weryfikację przed nadpisaniem pliku, a drugi wyświetli, co jest w linii poleceń.
Następnie możesz zobaczyć, że dodałem opcję "$ 1". Podczas wykonywania skryptów znak dolara ($), po którym następuje numer, będzie oznaczać numerowany argument skryptu podczas jego wywoływania. Na przykład w następującym poleceniu:
cp -iv Trogdor2.mp3 dzwonek.mp3
Pierwszy argument to "Trogdor2.mp3", a drugim argumentem jest "ringtone.mp3".
Patrząc wstecz na nasz skrypt, widzimy, że odwołujemy się do dwóch argumentów:
Oznacza to, że po uruchomieniu skryptu będziemy musieli podać dwa argumenty, aby skrypt działał poprawnie. Pierwszy argument, 1 $, to plik, który zostanie skopiowany i zostanie podstawiony jako pierwszy argument polecenia "cp -iv".
Drugi argument, 2 $, będzie działał jako plik wyjściowy dla tego samego polecenia. Ale możesz też zobaczyć, że jest inaczej. Dodaliśmy okres i odnaleźliśmy zmienną "date_formatted" z góry. Ciekawy, co to robi?
Oto, co dzieje się, gdy skrypt jest uruchamiany:
Możesz zobaczyć, że plik wyjściowy jest wymieniony jako cokolwiek wprowadziłem za 2 $, po którym następuje kropka, a następnie wynik polecenia date! Ma sens, prawda?
Teraz, gdy uruchomię polecenie datecp, uruchomi on ten skrypt i pozwoli mi skopiować dowolny plik do nowej lokalizacji i automatycznie doda datę i godzinę do końca nazwy pliku. Przydatny do archiwizowania rzeczy!
Skrypty powłoki są podstawą do tego, aby twój system operacyjny działał dla ciebie. Nie musisz uczyć się nowego języka programowania, aby to się stało. Wypróbuj skrypty z niektórymi podstawowymi poleceniami w domu i zacznij myśleć o tym, do czego możesz tego użyć.
Czy piszesz? Czy masz jakąś radę dla początkujących? Podziel się swoimi przemyśleniami w komentarzach! W tej serii jest jeszcze więcej!