Alternatywne skrypty do skryptów powłoki Bash

16

Właśnie przeprowadziłem migrację do stacji roboczej UNIX. Moja pamięć skryptów powłoki Basha zanikła od czasu szkoły i uważam, że składnia jest bardzo myląca. Zastanawiam się, jakie inne języki skryptowe są używane do automatyzacji zadań. Dwa najbardziej popularne, o których słyszałem, to Perl i Python.

  1. Który język skryptowy jest najczęściej używany przez sklepy ze świata rzeczywistego?
  2. Który język skryptowy najbardziej przypomina składnię C / C ++?
  3. Czy istnieje inny język skryptowy, którego nie znam?

Dzięki za pomoc,

Scott

Scott Davies
źródło
2
To prawdopodobnie powinna być wiki społeczności.
EBGreen,
2
Właściwie używam PHP do większości zadań systemowych. Wkrótce ułożę właściwą odpowiedź. Ma wbudowane wiele bibliotek, co jest przydatne.
Kyle Hodgson,
Języki przeznaczone do powłoki robią coś, czego inne języki mogą nie robić; Który zarządza i kontroluje wszystkie procesy potomne rekurencyjnie odradzane. Blog reklamujący Phusion Passenger wyjaśnia szczegółowo: phusion.github.io/baseimage-docker Krótko mówiąc, twoje skrypty napisane w języku lang-x prawdopodobnie nie obsługują poprawnie procedur zamykania. Co jest całkowicie w porządku, o ile uruchomisz je jako dzieci prawdziwego procesu powłoki. Uwaga, nie jestem ekspertem. Te informacje są dla mnie najlepsze, co może być błędne.
ThorSummoner,

Odpowiedzi:

12

Do pewnego stopnia jest to kwestia osobistych preferencji. Perl i Python są zdecydowanie pod względem popularności.

Aby odpowiedzieć na dwa z trzech pytań:

  1. Domyślam się, że bash jest najczęściej używany, prawdopodobnie następuje perl. Tylko zgaduję, nie wiem, czy ktoś zrobił ankietę. :)
  2. Istnieją bazilliony języków skryptowych. :)

Jednak moim zaleceniem jest Python. Jest łatwy do czytania i pisania, niezwykle potężny, aw Internecie jest mnóstwo przydatnych zasobów do nauki, nie wspominając już o kodzie, który można skopiować i zmienić.

DictatorBob
źródło
1
Popieram to. Uważam, że Python jest łatwy do nauczenia się i jest w stanie zrobić wszystko, co w niego wrzucę, ponieważ było to w starym dobrym systemie operacyjnym / 2 dni z REXX.
slovon
3
+1 dla Pythona ... moc C w języku skryptowym. Możesz tworzyć skrypty tak proste lub tak złożone, jak chcesz;)
KFro
1
w systemach innych niż NT moduł python shumożliwia korzystanie z Pythona jako języka skryptowego powłoki; Jeśli jednak natkniesz się na przypadki skrajne (takie jak przetwarzanie wieloprocesowe), musisz nauczyć się modułu podprocesu, który do dziś uważam za zbyt trudny do użycia.
ThorSummoner,
5

Perl i Python to oczywiście odpowiedzi; ale każde z nich służy do wykonywania różnych zadań:

  1. Bash - Podaj najłatwiejszy do nauczenia się. Za pomocą skryptów Bash uruchamiasz polecenia i manipulujesz danymi wyjściowymi.
  2. Python - drugi najłatwiejszy do nauczenia się. Python jest znacznie bardziej przydatny niż Bash, ponieważ możesz używać Pythona do pisania pełnych programów i jest dobrze obsługiwany przez społeczność. Python jest również niezwykle czytelny i łatwy do edycji kilka miesięcy później.
  3. Perl - najlepszy z trzech (do pisania skryptów), ale z łatwością najbardziej stromy krzywa uczenia się. Ma bardzo dobrą obsługę wyrażeń regularnych (co jest głównym powodem, dla którego wciąż jest w użyciu) i prawdopodobnie z czasem napotkasz wiele skryptów Perla. Głównymi problemami z Perlem jest czytelność kodu - miesiące po napisaniu kodu nie będziesz w stanie dowiedzieć się, co on robi. Więc lepiej mocno komentuj.
  4. Awk / Sed - Oba są bardzo przydatne, ale oba bardzo trudne do nauczenia. Proponuję zająć się tymi ostatnimi, chyba że jesteś dobry w wzorach.

Jeśli chodzi o to, którego się teraz uczyć (skoro prawdopodobnie nie znasz żadnego z nich), nauczyłbym się Pythona. Jest to najprostszy i najbardziej przydatny do poznania.

A jeśli chodzi o odpowiedzi na twoje pytania:

Który język skryptowy jest najczęściej używany przez sklepy ze świata rzeczywistego?

Wszystkie, ale wyobrażam sobie, że Perl ma tutaj pewną przewagę (ponieważ jest używany w administracji systemu znacznie dłużej).

Który język skryptowy najbardziej przypomina składnię C / C ++?

Perl

Czy istnieje inny język skryptowy, którego nie znam?

Ruby, Tcsh / Csh, http://en.wikipedia.org/wiki/Interpreted_language

Michael Pobega
źródło
2
Jeśli poświęcisz trochę czasu perlowi, możesz napisać perl doskonale czytelny. Ludzie, którzy piszą kod spaghetti, zbyt szybko obwiniają Perla za swoje niepowodzenia.
Cian
1
Mówię tylko w oparciu o doświadczenia jako administrator systemu; Musiałem zachować kod napisany przez innych ludzi, który był prawie niemożliwy do odczytania. Zwykle po prostu przepisuję kod w Pythonie.
Michael Pobega,
3

awk dla małych zadań, python dla więcej niż onelinerów.

Python (jeśli nie używasz określonych interfejsów API i innych rzeczy zależnych od platformy) ma bogatą „standardową bibliotekę”, która jest dostępna na wszystkich platformach, na których używasz wersji Pythona. Jest to bardzo miłe, ponieważ możesz łatwo ponownie używać skryptów i oznacza to, że twoja wiedza jest dobrą inwestycją, nawet jeśli zmienisz platformę.

W naszej firmie używamy Pythona do wszystkich skryptów, monitorowania, ... i java dla aplikacji, i mamy się dobrze w heterogenicznym środowisku.

slovon
źródło
1

Powiedziałbym, że perl i python to prawdopodobnie dwie najlepsze alternatywy. Możesz również wiele zrobić za pomocą sed i awk.

EBGreen
źródło
1

Sh (skorupa Bourne'a), grep, awk i sed to zawsze dobra rzecz, aby znów się uchwycić. Perl jest doskonały, jeśli nie masz dużo wyrażeń regularnych, a łatwość konserwacji nie jest aż tak ważna (nie mówiąc, że nie jest to możliwe). Pyton; jeśli czytelność jest dla Ciebie ważna. Preferuję Python, ale wszystkie te narzędzia są dobre dla większości rzeczy, które na niego rzucasz. Możesz ponownie rozważyć twoje wymagania dotyczące składni c / c ++, utknięcie w nim nie pomoże ci na dłuższą metę.

Martin P. Hellwig
źródło
Dzięki Martin. Zauważyłem (z próbek w Internecie), że Perl jest bardzo podobny do PHP (choć jestem pewien, że historycznie był to Perl przed PHP). Czy to jest uczciwe oświadczenie?
Scott Davies,
PHP 1.0 był skryptem perla, więc to nie przypadek :)
Bill Weiss,
1

Jeśli chcesz nauczyć się czegoś od zera, prawdopodobnie najlepiej (ponownie) naucz się bash.

Poza tym perl i python są obecnie popularne; Jestem stronnikiem perla, ale mój styl skryptowania w perlu niewiele się zmienił, odkąd Perl 4 został wydany.

Nie znam żadnych języków skryptowych typu „c-syntax”.

David Mackintosh
źródło
1

Perl, bez dwóch zdań, choćby po niesamowity zasób CPAN ( http://search.cpan.org/ ). Zaletą używania języka skryptowego w tak ogromnej społeczności jest to, że prawdopodobnie nigdy nie będziesz musiał niczego wymyślać.

Zaletą Perla jest to, że jest tak złożony, jak potrzebujesz w obecnej sytuacji. Możesz traktować go jako prosty język skryptowy do szybkiego administrowania lub skryptów jednofunkcyjnych, ale możesz używać pojęć obiektowych lub rozbudowanych systemów meta obiektów, gdy chcesz tworzyć większe, łatwe w utrzymaniu aplikacje (takie jak demony, serwery, klienci).

Różnice między samymi językami skryptowymi nie są wystarczająco poważne, aby wybrać wyraźnego zwycięzcę, ale przede wszystkim powinieneś zastanowić się, jak łatwo będzie ci znaleźć informacje na interesujące Cię tematy.

Składnia Perla może być uderzająco zbliżona do C, o ile można obejść brak pisania i znaków; zaawansowane użycie perla pojawi się naturalnie, gdy w końcu poznasz mocne strony języka.

A dla naysayers na froncie czytelności: możesz pisać trudne do odczytania kody w dowolnym języku. Jeśli spojrzysz wstecz na swój kod sprzed 4 miesięcy i nie rozumiesz go, robisz coś złego.

ps Ten post został wypełniony linkami do różnych przyjaznych modułów administracyjnych na CPAN, ale najwyraźniej nowi użytkownicy mogą publikować tylko jeden link, więc użyj tego linku CPAN do wyszukiwania takich rzeczy jak „CVS”, SVN, „Cron” i „Łoś” (an rozbudowany system obiektowy)

jsoverson
źródło
1
  • Rubin
  • Pyton
  • Go - język wieloplatformowy, skrypty są wymieniane jako jedna z mocnych stron Go .
  • Node.js - patrz Grunt.js, Gulp.js. Wiele projektów używa teraz Node.js jako narzędzia do automatyzacji powłoki.
  • Perl
Brian Jordan
źródło
1

[ogólne porady dotyczące skryptowania, zobacz inne odpowiedzi]

Ta odpowiedź dotyczy korzystania z programów wiersza polecenia, a także ich dużych łańcuchów.

Do uruchamiania łańcuchów programów CLI i być może wielu łańcuchów w sekwencji, bash jest najłatwiejszy. Perl może zrobić to samo, ale język jest znacznie trudniejszy do nauczenia się i jest znacznie bardziej złożony, i jak wielu zauważyło, łatwo jest napisać zrozumiały Perl.

Jeśli iterujesz po plikach i parametrach, bash jest najłatwiejszy do zrobienia b / c, możesz prototypować w powłoce, a następnie skopiować do skryptu i dodać kilka tablic i pętli przy minimalnym obciążeniu.

Przykłady tego, co mam na myśli:

$ cat input.dat | numerical_model source_data ${SRC} grid_size ${GRID_SIZE} param1 ${P1} param2 ${P2} | tee ${OUTPUT} | plotter title ${TITLE} ylabel ${YLABEL} xlabel ${XLABEL} > ${OUTPUT_FIG}
$ cat ${OUTPUT} | stats_cmd bin_size ${BINSIZE} dist_type ${DIST_TYPE} | tee ${OUTPUT_STATS} | plotter plot_type ${PLOT_TYPE} title ${TITLE_STATS} > ${OUTPUT_FIG_STATS}

W bash łatwo jest zawinąć to w kilka pętli nad niektórymi z tych parametrów. Jednak kod staje się trudny do odczytania, gdy skrypt ma więcej niż kilkadziesiąt linii. --- wyobraź sobie 30 zestawów poleceń (po kilka wierszy) dla trzydziestu różnych wykresów danych ---

Perl i Python mogą być lepsze dla dużych skryptów, ponieważ mają czystszą składnię dla zapętlania i zmiennych, ale polecenia bash muszą być generowane jako łańcuchy, uruchamiane jako podprocesy i przechwytywane stdin, stdout. Można to zrobić, ale nie można w pełni zastąpić natywnego środowiska powłoki.

Gdyby powłoki miały lepszy język, wszystko by tego uniknęło.

powieściopisarz
źródło
0
  1. najczęściej używane: Perl, głównie ze względów historycznych. Python jest szeroko dostępny we wszystkich dystrybucjach Linuksa i BSD (jest nawet zainstalowany na Mac OSX) i jest o wiele przyjemniejszy do nauki / programowania. Oczywiście, kiedy już uzyskasz składnię, Bash jest prostszy do prawie wszystkiego, co możesz zrobić w wierszu poleceń. W końcu jest to linia poleceń.

    • Składnia C: istnieje csh , ale możesz łatwo zainstalować TCC i używać prawdziwego C jako języka skryptowego, skompilowanego ze źródła w krótszym czasie niż uruchomienie innych języków.

    • inne języki skryptowe: dużo! Lua , Ruby , JavaScript ...

Javier
źródło
0

Powinieneś używać kombinacji wszystkich tam, gdzie jest to właściwe. Naprawdę nie lubię perla (czytelność), ale jest dobry na wiele rzeczy. Z drugiej strony Python był dla mnie czymś nowym pod względem administrowania systemem, dopóki nie musiałem zarządzać (i nadal muszę) kilkoma maszynami KVM. Uruchamianie, zatrzymywanie, zapisywanie, ładowanie, migracja wszystkich tych maszyn za pomocą skryptu stało się rzeczywistością po 1 godzinie bawiących się wiązaniami pythonowymi libvirt.

Na koniec nie użyłbym Perla ani Pythona, jeśli muszę, powiedzmy, zrzucać wszystkie bazy danych z serwera mysql co noc (każda baza danych we własnym pliku zrzutu), tarować je i synchronizować z innym serwerem. Dlaczego ? Ponieważ szybsze i łatwiejsze jest pisanie w bash :)

Ostatecznie powinieneś używać języka, który najlepiej odpowiada twojemu bieżącemu zadaniu, i nie używaj tylko danego języka skryptowego tylko dlatego, że lubisz go najbardziej.

sh1ny
źródło
0

Lubię rubin. Programowanie jest proste i łatwe. Istnieje doskonała książka na temat administrowania systemem za pomocą rubinu .

Ruby jest używany w kilku systemach zarządzania konfiguracją (capistrano, szef kuchni, marionetka) i ostatniej wersji metasploit.

Możesz użyć rush , zamiennika powłoki uniksowej ze składnią ruby ​​i robić takie rzeczy:

local = Rush::Box.new('localhost') 
remote = Rush::Box.new('my.remote.server.com')     
local_dir = local['/Users/adam/myproj/']
remote_dir = remote['/home/myproj/app/']

local_dir.copy_to remote_dir
remote_dir['**/.svn/'].each { |d| d.destroy }
chmeee
źródło
Dzięki Chmee. Nie miałem pojęcia, że ​​możesz użyć Ruby dla sysadmin - zawsze myślałem, że jest on skoncentrowany na sieci. Szukam czegoś używanego w większości organizacji. Czy można uczciwie powiedzieć, że Ruby dla sysadmin wciąż jest zbyt krwawiąca?
Scott Davies
1
Shell / Perl to jedyne dwa języki, które można niezawodnie znaleźć wszędzie zainstalowane. Python jest prawdopodobnie kolejnym najczęściej używanym językiem, z rubinem biegnącym w bardzo odległej czwartej (a właściwie piątej, za awk).
Cian
@ScottDavies PHP i ASP.net są jedynymi znanymi mi językami; nawet Javascript zaprojektowany do uruchamiania wyłącznie w Internecie ma dojrzałą przeszłość i jest niezbędny do sprawdzania poprawności formularza. Jednak możesz wysłać HTML w dowolnym języku, nawet najwyraźniej bash .
ThorSummoner,
0

Przykład Ruby One-Liner:

> echo 'Shell is the best!' | ruby -pe 'gsub("Shell", "Ruby")' 

Ruby is the best!

> printf "foo\nbar\nbaz\n" |  ruby -ne 'BEGIN { i = 1 }; puts "#{i} #{$_}"; i += 1'

1 foo
2 bar
3 baz

Użyłbym rubinu.

Porównaj z sh, jest nowoczesny i potężny.

W porównaniu do Pythona, jest to spójność, jedno wydanie, jeden menedżer pakietów. I nie lubię składni wcięć.

Porównajmy z Perlem, trochę oldschoolowym, a składnia jest dla mnie zbyt złożona.

Jakub
źródło