(Nie jestem pewien, czy jest to właściwe pytanie tutaj)
Skrypty powłoki, podobnie jak te napisane bash
, mogą robić wiele rzeczy. Mogą wywoływać programy uniksowe, przesyłać dane wyjściowe, przekierowywać wejścia / wyjścia z / do plików, kontrolować przepływ, sprawdzać, czy plik istnieje itp.
Ale nowoczesny język programowania, na przykład, python
i ruby
może również robić te rzeczy. I są one (myślę) bardziej czytelne i łatwe w utrzymaniu.
bash
cieszy się szerokim zainteresowaniem. Ale wiele dystrybucji ma również zainstalowany python
interpreter.
Jaka jest więc zaleta skryptu? Gdybym mógł pisać python
, ruby
czy perl
warto się uczyć bash
?
programming-languages
shell
Lai Yu-Hsuan
źródło
źródło
Odpowiedzi:
Powłoki mają wyspecjalizowane funkcje do pracy z plikami i przenoszenia danych z jednego programu do drugiego (przy założeniu, że dane są tekstem). Do tych zadań skrypty powłoki mogą być mniej kłopotliwe niż język skryptowy, taki jak Python.
Zaletą skryptu powłoki jest to, że używane polecenia są w zasadzie tymi samymi poleceniami, których używasz z wiersza poleceń - więc jeśli możesz coś zrobić w powłoce, jesteś w połowie drogi do skryptu tej samej operacji.
Oto na przykład skrypt bash, który przenosi wszystkie pliki PNG z bieżącego katalogu do określonego katalogu.
Oto wersja Python.
Zauważysz:
mv
polecenia w bashsource
w tym samym wystąpieniu powłokiglob.iglob("./*.png")
to całkiem kęs*.png
Jeśli chciałbyś napisać podstawową operację na potoku w Pythonie, byłbyś zaskoczony gadatliwością. (Oczywiście niektóre rzeczy, takie jak przesyłanie strumieniowe
grep
, można zastąpić kodem w języku Python zamiast używać zewnętrznego programu, więc często nie trzeba tak dużo przesyłać strumieniowo.)Jako kontrprzykład musiałem kiedyś napisać procedurę sprawdzającą, jak długo każda z nazw plików znajduje się w określonym katalogu. Jeśli były dłuższe niż obsługiwane przez określony system operacyjny, musiały zostać skrócone. Może to spowodować zduplikowanie nazw plików, które musiałem skorygować, a ponieważ byłyby linkowane ze strony internetowej, skrócone nazwy musiały być stabilne, tj. Powinny być generowane w taki sposób, aby ta sama długa nazwa pliku zawsze skutkowała ta sama skrócona nazwa pliku. Zrobiłem to, generując szesnastkową md5 długiej nazwy pliku i dodając pierwsze cztery znaki do skróconej nazwy (nazwy nadal mogą się kolidować, ale było to bardzo niejednoznaczne, więc po prostu sprawdziłem ten warunek i zapłaciłem kaucję, jeśli tak się stanie) .
Zrobiłem to w bash, ponieważ był on częścią naszego systemu kompilacji, który był już napisany w bash. Dokładnie tak trudno było sobie wyobrazić. Pisanie w Pythonie zajęłoby o wiele mniej czasu i zapewne też byłoby jaśniejsze.
W skrócie: różne języki są zaprojektowane do różnych rodzajów zadań; wybierz dostępny język, który najlepiej odpowiada wykonywanemu zadaniu.
źródło
mv *.png $1
(komentarze nie zachowują formatowania), ale w perlu możesz również używać funkcji języka wyższego poziomu.Istniejące odpowiedzi są również poprawne, ale jest jeden powód, o którym nikt jeszcze nie wspomniał: ponieważ BĘDZIE tam.
Każda podana instalacja * nix jest wykonywana przy użyciu zestawu opcjonalnych pakietów, które mogą zostać załadowane lub nie, i nie wszystkie systemy będą miały Python, Perl lub Ruby. Ale jeśli oczekuje się, że system będzie miał jakąkolwiek zdolność interaktywną, będzie miał powłokę. Oznacza to, że skrypty powłoki będą działać w systemach od serwerów, przez komputery programistów, przez sekretarskie komputery typu cienki klient, aż po urządzenia osadzone, w każdym systemie, który obsługuje zapisywalny system plików i wiersz poleceń bash.
Dla kogoś, kto pracuje tylko w spójnym środowisku serwerowym, jest to coś, co można uznać za coś oczywistego i nie jest tak ważne. Dla kogoś pracującego w bardziej zróżnicowanym środowisku nie należy tego lekceważyć.
źródło
Odpowiedź na znaczną część twojego pytania:
Oto fragment mojej odpowiedzi na to pytanie :
źródło
Powiedziałbym, że skrypt powłoki ma tę przewagę w sytuacjach, w których chcesz po prostu wykonać super-proste, zautomatyzowane zadanie. Na przykład, jeśli chcesz napisać skrypt, który tworzy kopię zapasową katalogu z jednego serwera na drugi każdego dnia o 5:00, używanie zbyt mocnego języka programowania byłoby przesadą.
Z drugiej strony, jeśli twoje zadanie programistyczne wymaga bardziej struktur kontrolnych (if / then / else), iteracyjnych (pętla), baz danych i plików we / wy itp., To prawdopodobnie lepiej nadaje się dla bardziej zdolnych język programowania niż skrypt powłoki.
Myślę, że dobrą zasadą jest:
źródło
shellScript() if automatingSimpleTask else programmingLanguage()
lol.Chociaż możesz uruchamiać programy z programu python / ruby / cokolwiek innego, w powłoce jest inaczej. Może być konieczne użycie interfejsu API, aby coś uruchomić - na przykład fork (). W skrypcie powłoki programy zachowują się bardziej jak funkcje w tradycyjnym języku programowania i mogą być uruchamiane, przesyłane strumieniowo itp. Przy minimalnym wysiłku. Przepływ danych jest również bardzo wyraźny przy użyciu rur.
źródło
Jeśli masz całkowitą swobodę wyboru języka programowania używanego do niektórych zadań, prawdopodobnie prawie całkowicie unikniesz nauki bash i wykonasz każde zadanie programowania skryptowego za pomocą Perla, Pythona lub Ruby. Może to czasem prowadzić do bardziej szczegółowego rozwiązania, szczególnie w przypadku, gdy potrzebujesz tylko skryptu wywołującego sekwencję innych narzędzi uniksowych, ale w bardziej skomplikowanych przypadkach masz rację, te nowoczesne języki skryptowe dają więcej możliwości pisania lepiej utrzymywalnego kodu (dają też więcej możliwości pisania zaciemnionego kodu, ale to twój wybór).
Z drugiej strony często nie jesteśmy w stanie wybrać języka, który najbardziej nam się podoba, ponieważ musimy pracować ze starszym kodem lub kodem napisanym przez kogoś, kto znał bash, ale nie znał żadnego z wymienionych przez ciebie języków skryptowych.
źródło
Skrypty powłoki to interpretowany język programowania. Oto kilka powodów, dla których zdecydowałem się pisać skrypty bash zamiast perla, pytona lub innego języka skryptowego:
Działa wszędzie : bardziej złożone interpretatory mogą nie zawsze być dostępne, na przykład podczas uruchamiania systemu lub systemów wbudowanych. Bash jest dostępny nawet w busyboksie.
Działa w wierszu poleceń : jeśli jesteś dobrze zaznajomiony ze skryptami powłoki, możesz wykorzystać te umiejętności do robienia złożonych rzeczy w skryptach ad-hoc bezpośrednio w wierszu poleceń. Używam tej umiejętności codziennie jako administrator.
Łatwiejsze pisanie programów wywołujących inne programy: Jeśli próbujesz połączyć kilka istniejących programów w interesujący sposób, łatwiej jest to zrobić w skrypcie powłoki niż w języku wyższego poziomu.
Jeśli program ma 30 wierszy lub mniej, zwykle piszę go za pomocą skryptów powłoki. Jeśli masz do czynienia ze złożoną manipulacją, kompleksem lub analizą, zrobię to używając Pythona lub Perla.
źródło
Powinieneś spojrzeć na coffeescript. Ich słowa:
Złota zasada CoffeeScript to: „To tylko JavaScript”.
Cóż ... oto odpowiedź dla początkujących.
Jako początkujący uczący się przez ostatnie 6 miesięcy, w ostatnich dniach próbujący trochę C, C ++, Javascript i więcej Bashscript ... Mogę ci powiedzieć:
i czyż nie jest to po prostu fantastyczne! ? pętle i zmienne? łał!
Powiedz mi, gdzie to widzisz? Napisałem bashscript w gedit nawet w geany i mogę formatować (tabulatory?) I czytam mój kod z prędkością światła, używając bashscript w porównaniu do innych języków.
Czy te języki mają inne narzędzia do utrzymania porządku? Wiem, że obiektowe oszczędza DUŻO kodu, ale ... ludzie mówią, że bashscript to także OO! WOW 2! To jest mój punkt tutaj. Zamierzam:
kryje się w tym pytaniu: jak zrobić to bzdury w Perlu, Phytonie lub Rubinie ? To jest łatwe?
( bashdamnthing = xdotool )
źródło