Czy jest już zastosowanie skryptów Bash? [zamknięte]

Właśnie skończyłem drugi rok jako student CS na Uniwersytecie, więc brakuje mi wiedzy w "realnym świecie". Uczyłem się Javy na pierwszym roku, kontynuowałem z Javą i podniosłem C i simple Bash piszę scenariusz. Tego lata próbuję nauczyć się Perla (Boże dopomóż mi). W przeszłości grałem z Pythonem.

Moje pytanie brzmi, teraz, gdy mamy bardzo czytelne, bardzo zapisywalne języki skryptowe, takie jak Python, Ruby, Perl, itp, Dlaczego ktoś pisze skrypty Bash? Is there something I ' m zaginęła? Wiem, że mój Linux ma Perla i Pythona. Czy nie są wystarczająco wszechobecne? Czy naprawdę jest coś łatwiej to zrobić w Bash niż w jakimś innym hll?

Author: dreftymac, 2010-05-20

18 answers

Między innymi bash jest przydatny, gdy Większość to, co robisz, to komunikacja i rurociągi między różnymi programami (wiele z nich jest również standardowych). Istnieje wiele środowisk, w których bash (lub przynajmniej powłoka POSIX) jest dostępna, ale Perl i Python nie są.

I oczywiście powinieneś odróżnić interaktywną bash od skryptowej bash. Ubuntu niedawno zamieniło domyślną powłokę skryptową (#!/bin/sh) Na dash, ponieważ była znacznie szybsza. Jednak bash ma przydatne interaktywne funkcje dash Nie (zsh jest jeszcze lepszy, IMHO).

Zobacz także czy warto uczyć się Basha, gdy znam Perla?

 53
Author: Matthew Flaschen,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:18:02

Bash jest niezwykle przydatny w administrowaniu systemem, wdrażaniu aplikacji internetowych, przetwarzaniu danych, tworzeniu kopii zapasowych, a nawet codziennym zarządzaniu, aby wymienić tylko kilka z nich. Myślę, że jest za wcześnie na ocenianie "weterana IT soldier" jak BASH.

EDIT googling around:

Chciałbym również wspomnieć, że TextMate udany program OS-X ma wiele maszyn Bash wewnątrz.

 29
Author: microspino,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-05-20 09:17:22

Prawdziwa różnica między bashem a Pythonem polega na tym, że python jest językiem skryptowym ogólnego przeznaczenia, podczas gdy bash jest po prostu sposobem na uruchamianie niezliczonej ilości małych (i często bardzo szybkich) programów w serii. Python może to zrobić, ale nie jest do tego zoptymalizowany. Programy (sort, find, uniq, scp) mogą wykonywać bardzo złożone zadania bardzo prosto, a bash pozwala tym zadaniom na bardzo prostą współpracę z rurociągami, płukaniem wyjścia z plików lub urządzeń itp.

While Python can run the same programy, będziesz zmuszony wykonać skrypt bash w skrypcie Pythona, aby osiągnąć to samo, a następnie utkniesz z Pythonem i bash. Oba są w porządku przez nich samych, ale mieszanka z nich nie poprawia niczego IMHO.

 22
Author: daramarak,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-05-20 08:43:27

Skrypty Bash pozwalają automatyzować zadania linii poleceń za pomocą tego samego języka , który można by wpisać ręcznie.

Trywialny przykład do listy $PATH

Bash

#!/bin/sh
echo $PATH

Python

import os
print os.getenv("path")
 21
Author: mikek3332002,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-08-30 03:38:37

W przypadku wielu zadań bash może być bardzo zwięzły. Kod, aby wyszukać ciąg znaków we wszystkich plikach bieżącego katalogu i wydrukować te linie:

W bash:

grep -ir "search_term" .

W Pythonie:

for file in os.listdir('.'):
  file_content = open(file).readlines().split('\n')
  for line in file_content:
    if line.count("search_term") > 0:
      print file, ": ", line
 12
Author: n1kh1lp,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-05-25 16:12:18

Myślę, że mocnym argumentem, że python nie jest tak naturalny jak bash dla wielu zadań, jest prosty fakt, że nikt nie używa interpretera Pythona jako powłoki. Oczywiście jest to możliwe:

python> import os, subprocess
python> os.chdir(os.path.expanduser("~/work"))
python> subprocess.call(["vim","README"])

Oczywiście używanie Pythona jako powłoki jest absurdalne. Bash został zaprojektowany do uruchamiania innych programów. Python został zaprojektowany do wykonywania obliczeń. Podczas gdy większość rzeczy można zrobić w dowolnym języku, zawsze będą zadania, które można wykonać łatwiej w bash niż w Pythonie i odwrotnie.

 8
Author: Quantum7,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-09-20 09:25:42

Cóż, pisząc za pomocą bash, możesz bezpośrednio użyć każdego możliwego narzędzia, które masz w wierszu poleceń skryptu. W każdym innym języku trzeba by najpierw wykonać to polecenie i uzyskać jakiś wynik itp. Prosty skrypt, który (na przykład) pobiera listę procesów, uruchamia grep i uzyskuje jakiś wynik, byłby o wiele bardziej skomplikowany w innych językach. Jako takie, bash jest nadal dobrym narzędziem do pisania szybkich rzeczy.

 6
Author: poke,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-05-20 08:23:50

Wiele skryptów startowych jest tradycyjnie pisanych jako skrypty powłoki i wydaje się, że nie ma tendencji do odejścia od nich.

Skrypty powłoki doskonale nadają się do uruchamiania innych procesów i klejenia ich wejścia/wyjścia razem. Jest to obszar, w którym inne języki skryptowe nie są tak potężne.

Poza tym: nawet jeśli języki takie jak Perl, Python i Ruby stają się coraz bardziej wszechobecne, jedynym językiem, który praktycznie gwarantuje na każdym uniksopodobnym systemem jest powłoka bourne ' a ('choć niekoniecznie w formie bash ).

 4
Author: Joachim Sauer,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-05-20 08:26:12

Pomijając to, co powiedzieli inni, chciałbym zwrócić uwagę na to, co jest moim zdaniem głównym powodem do nauki basha: jest to (prawie) standardowy Linux shell.

Inne języki skryptowe są z pewnością przydatne i może o wiele potężniejsze, ale to, z czym będziesz miał do czynienia, gdy masz terminal przed sobą, jest... Bash.

Jest w stanie zarządzać I / o, rury i procesy, assing i używać zmiennych, i zrobić co najmniej kilka pętli i ocena stanu jest koniecznością, jeśli chcesz zarządzać systemem Linux.

 4
Author: Massimo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-05-20 16:11:04

Łatwiej, pewnie nie. W wielu przypadkach wolę Perla od skryptów bash. Bash ma jednak jedną zaletę, szczególnie w systemach Linux: wszystko jest gwarantowane. A jeśli nie, jego ojciec (sh) będzie w dużej mierze kompatybilny, ponieważ prawie wszystkie skrypty systemowe są pisane dla sh. Nawet perl nie jest tak wszechobecny, a wszędzie jest wszędzie.

 2
Author: cHao,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-05-20 08:27:43

Bash jest nie tylko językiem skryptowym, ale także powłoką.

Job control languages and shells
Główny artykuł: shell script

A major class of scripting languages wyrosła z automatyzacji pracy kontroli, która dotyczy uruchamiania i kontrolowanie zachowania systemu programy. (W tym sensie można myśl o muszlach jako o potomkach JCL IBM, czyli Job Control Language, który został użyty właśnie do tego cel.) Wielu z tych języków" interpretery podwójne jako wiersz poleceń interpreterów, takich jak powłoka Unix czy MS-DOS COMMAND.COM. inne, takie jako AppleScript oferują zastosowanie Angielskie polecenia do budowania Skrypty. To w połączeniu z Mac OS X Cocoa Framework pozwala użytkownikowi na budowanie całe aplikacje korzystające z AppleScript Obiekty & kakao.

Python, Ruby i Perl są świetne, ale są bardziej ogólnymi narzędziami; w niektórych przypadkach (urządzenia wbudowane lub inne minimalistyczne systemy) mogą być uznane za nadęte lub w innych sytuacjach mogą stanowić zagrożenie dla bezpieczeństwa(dla środowisk, w których zależy ci na bardzo wysokim poziomie bezpieczeństwa i starasz się wyeliminować zbędne Pakiety).

W niektórych przypadkach skrypty powłoki będą działać znacznie lepiej dzięki ściślejszej integracji z systemem operacyjnym.

Również bash jest produkcją sprawdzoną dla niezliczonych zadań administracyjnych i łatwo jest znaleźć skrypty, które obejmą bardzo skomplikowane scenariusze (wyjątki) i obsłużyć je z wdziękiem.

 2
Author: Unreason,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-05-20 08:44:08

Jeśli robisz wiele rzeczy GUI, prawdopodobnie spotkasz Basha tylko wtedy, gdy robisz jakieś dostosowanie na własnej maszynie. Różne hacki i takie tam. Jeśli używasz wiersza poleceń do robienia rzeczy, bash jest po prostu niezbędny. W rzeczywistości, bycie dobrym w wierszu poleceń wymaga bash lub innej znajomości powłoki.

Wyciągam Milesa z nauki Basha, kiedy chciałem szybko poruszać się po moim dysku twardym. Napisałem interfejs nawigacyjny / menu, który pozwalał mi przenosić się do różnych folderów i pliki szybko i łatwo. Pisanie go w bash było proste i łatwe. Jest wiele łatwo dostępnych i darmowych rzeczy, które pokażą Ci, jak to zrobić.

Ponadto, nauka Bash jest świetna do zrozumienia, jak Unix i niektóre z podstawowych rzeczy naprawdę działa - i jak daleko zaszliśmy z narzędziami takimi jak Python.

 2
Author: brainysmurf,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-05-20 13:44:40

Bash (oraz oryginalne Bourne sh i niezliczone pochodne) to - z jednej strony-język niezwykle wysokiego poziomu. Gdzie wiele języków używa prostych prymitywów, prymitywy powłoki to całe programy.

To, że może nie być najlepszym językiem do wyrażania swoich zadań, nie oznacza, że jest martwy, umierający, czy nawet martwy.

 1
Author: msw,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-05-20 08:27:54

Możesz uzyskać prawdziwy bournesh w freshmeat (na przykład w Mac OS X, /bin/sh nie jest prawdziwym bournesh).

Jak rozpoznać tradycyjną muszlę Bourne ' a? ... Prosta kontrola często nieudokumentowanej, ale charakterystycznej cechy: możesz użyć circumflex ^ (karetka) jako zamiennika | (rura).

Zobacz: http://www.in-ulm.de / ~ mascheck / bourne /

 1
Author: pete,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-05-20 16:03:46

Z mojego doświadczenia wynika, że Perl spełnia około 99% potrzeb, które mogą wymagać skryptu powłoki. Jako bonus można napisać kod, który działa na Windows bez Cygwina. Jeśli nie będę miał instalacji Perla na pudełku Windows, który chcę kierować, mogę użyć par:: Packer lub PerlApp do wytworzenia pliku wykonywalnego. Python, Ruby i inne powinny działać równie dobrze.

Jednak skrypty powłoki nie są aż tak skomplikowane-przynajmniej rzeczy, które powinieneś skryptować w powłoce, nie są wszystkim skomplikowane. Możesz zrobić to, co musisz zrobić z dość płytkim poziomem wiedzy.

Naucz się odczytywać i ustawiać zmienne. Jak tworzyć i wywoływać funkcje. Jak pozyskiwać inne pliki. Dowiedz się, jak działa kontrola przepływu.

I co najważniejsze, naucz się czytać stronę podręcznika powłoki. Może to zabrzmieć facetious, ale jestem w 100% poważny-nie martw się o wciśnięcie każdego szczegółu skryptów powłoki do twojego mózgu, zamiast tego naucz się szybko znaleźć to, co musisz wiedzieć na stronie man i skutecznie. Jeśli często używasz skryptów powłoki, odpowiednie informacje naturalnie utkną w twoim mózgu.

Więc tak, podstawy powłoki warto się nauczyć.

 1
Author: daotoad,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-05-20 16:18:27

Jestem facetem Perla, ale liczba funkcji bash (lub ksh), których używam i tworzę na co dzień, jest dość znacząca. W przypadku jakichkolwiek problemów napiszę skrypt Perla, ale do poruszania się po strukturze katalogów, a konkretnie do manipulowania zmiennymi środowiskowymi bash/ksh/... są niezbędne.

Znowu, szczegăłlnie dla zmiennych Ĺ "rodowiskowych nic nie przebije shella, a sporo programĂłw uĹźywa zmiennych Ĺ" rodowiskowych. W Perlu muszę napisać Alias bash lub funkcję to wywołuje skrypt Perla, który wypisuje tymczasowy skrypt bash, który następnie jest pozyskiwany po wyjściu Perla, aby dokonać zmiany w tym samym środowisku, z którego uruchamiam.

Zrobiłem to, szczególnie do podnoszenia ciężkich zmiennych ścieżki. Ale nie ma sposobu, aby to zrobić w tylko Perl (lub python lub ruby... lub kod C).

 1
Author: Axeman,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-05-20 19:46:35

Jak wspomnieliśmy, narzędzia GNU są świetne i są najłatwiejsze w użyciu w powłoce. Jest to szczególnie miłe, jeśli dane są już w formie liniowej lub tabelarycznej zwykłego tekstu. Jako przykład, pewnego dnia udało mi się zbudować skrypt do tworzenia XHTML word cloud dowolnego pliku tekstowego w 8 lines of Bourne Shell, który jest jeszcze mniej wydajny (ale szerzej wspierany) niż Bash.

 1
Author: l0b0,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-06-30 08:02:11

Nie rozumiem, dlaczego ludzie mówią bash kiedy mają na myśli dowolną bourne-shell kompatybilną powłokę.

Podczas pisania skryptów powłoki: Zawsze staraj się używać konstruktów, które działają również w starszych interpreterach powłoki bourne ' a. Pewnego dnia zaoszczędzi ci to wielu kłopotów.

I tak, skrypty powłoki są dziś bardzo przydatne, ponieważ powłoka zawsze istnieje na wszystkich unixach, od razu po wyjęciu z pudełka, w przeciwieństwie do Perla, Pythona, csh, zsh, ksh (być może?), i tak dalej. W większości przypadków dodają tylko dodatkowe wygoda lub inna składnia dla konstrukcji takich jak pętle i testy. Niektóre z nich mają ulepszone funkcje przekierowywania.

Przez większość czasu powiedziałbym, że zwykła powłoka bourne ' a działa równie dobrze.

Typowy pułapka: if ! test $x -eq $y działa zgodnie z oczekiwaniami w bash, który ma bardziej sprytny wbudowany operator "if", ale " poprawny "if test ! $x -eq $y powinien działać we wszystkich środowiskach.

 1
Author: MattBianco,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-07-08 12:38:50