Bash 쉘 스크립트에 대한 스크립팅 대안


16

방금 UNIX 워크 스테이션으로 마이그레이션했습니다. 학교 이후 Bash 쉘 스크립트에 대한 기억이 사라졌으며 구문이 매우 혼란 스럽습니다. 작업을 자동화하는 데 다른 스크립트 언어가 사용되는지 궁금합니다. 내가 들었던 가장 인기있는 두 가지는 Perl과 Python입니다.

  1. 실제 상점에서 가장 널리 사용하는 스크립팅 언어는 무엇입니까?
  2. 어떤 스크립팅 언어가 C / C ++ 구문과 가장 비슷합니까?
  3. 내가 모르는 또 다른 스크립팅 언어가 있습니까?

당신의 도움을 주셔서 감사합니다,

스캇


2
커뮤니티 위키 일 것입니다.
EBGreen

2
실제로 대부분의 시스템 작업에 PHP를 사용합니다. 나는 이것으로 곧 적절한 답을 모을 것이다. 많은 라이브러리가 내장되어있어 편리합니다.
Kyle Hodgson

쉘 의도 언어는 다른 언어가 할 수없는 일을합니다. 재귀 적으로 생성 된 모든 하위 프로세스를 관리하고 확인합니다. 블로그 광고 Phusion Passenger은 그 이유를 자세히 설명합니다. phusion.github.io/baseimage-docker 간단히 말해 lang-x로 작성된 스크립트는 종료 루틴을 제대로 처리하지 못할 수 있습니다. 실제 쉘 프로세스의 자식으로 실행하는 한 완벽하게 괜찮습니다. 면책 조항, 나는 전문가가 아닙니다. 이 정보는 내가 이해할 수있는 최선의 정보 일 뿐이며 결함이있을 수 있습니다.
ThorSummoner

답변:


12

어느 정도 개인적인 취향의 문제입니다. Perl과 Python은 확실히 인기가 있습니다.

하지만 세 가지 질문 중 두 가지에 대답하려면 :

  1. bash가 가장 널리 사용되며 아마도 perl이 뒤따른다고 생각합니다. 그래도 추측하면 누군가가 설문 조사를 한 경우 몰라요. :)
  2. 거기에는 스크립트 언어의 독창성이 있습니다. :)

내 추천은 파이썬입니다. 쉽게 읽고 쓸 수 있고, 강력하고, 배우고 복사 할 수있는 코드는 말할 것도없고, 웹에는 학습을위한 유용한 리소스가 많이 있습니다.


1
나는 두 번째입니다. REXX를 사용하면 오래된 OS / 2 일 동안 파이썬을 배우기 쉽고 내가 던질 수있는 일을 할 수 있습니다.
slovon

3
파이썬의 경우 +1. 스크립팅 언어에서 C의 힘. 스크립트를 원하는만큼 간단하거나 복잡하게 만들 수 있습니다.)
KFro

1
NT가 아닌 시스템에서 파이썬 모듈 sh은 파이썬을 쉘 스크립팅 언어로 액세스 할 수있게합니다. 그러나 다중 처리와 같은 엣지 케이스가 발생하면 오늘날까지 사용하기 어려운 하위 프로세스 모듈을 배워야합니다.
ThorSummoner

5

펄과 파이썬은 분명히 답이다. 그러나 각각 다른 작업을 완료하는 데 사용됩니다.

  1. 배쉬-배우기 가장 쉬운 방법을 알려줍니다. Bash 스크립트를 사용하면 명령을 실행하고 출력을 조작 할 수 있습니다.
  2. 파이썬-배우기 가장 쉬운 방법. Python을 사용하여 전체 프로그램을 작성할 수 있고 커뮤니티에서 잘 지원되므로 Python은 Bash보다 훨씬 유용합니다. 파이썬은 매우 읽기 쉽고 몇 달 후에 쉽게 편집 할 수 있습니다.
  3. Perl-세 가지 중 최고 (스크립트 작성)이지만 가장 가파른 학습 곡선입니다. 정규 표현식 지원이 매우 뛰어나며 (이것이 오늘날에도 여전히 사용되는 주된 이유 임) 시간이 지남에 따라 많은 Perl 스크립트가 실행될 수 있습니다. Perl의 주요 문제점은 코드 가독성입니다. 코드를 작성한 후 몇 개월이 지나면 코드의 기능을 알 수 없습니다. 따라서 당신은 더 많이 언급하는 것이 좋습니다.
  4. Awk / Sed-둘 다 매우 유용하지만 배우기가 매우 어렵습니다. 패턴에 익숙하지 않으면 마지막으로 다루는 것이 좋습니다.

현재 어느 것을 배울 지에 대해 (아마도 아무도 모르기 때문에) 파이썬을 배울 것입니다. 가장 간단하고 유용한 정보입니다.

그리고 당신의 질문에 대한 답은 :

실제 상점에서 가장 널리 사용하는 스크립팅 언어는 무엇입니까?

그들 모두, 그러나 나는 Perl이 여기에서 약간의 이점을 가지고 있다고 상상할 것입니다 (시스템 관리에서 훨씬 더 오랫동안 사용되어 왔기 때문에).

어떤 스크립팅 언어가 C / C ++ 구문과 가장 비슷합니까?

내가 모르는 또 다른 스크립팅 언어가 있습니까?

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


2
펄에 시간을 투자하면 완벽하게 읽을 수있는 펄을 작성할 수 있습니다. 스파게티 코드를 작성하는 사람들은 실패로 인해 Perl을 비난하기에는 너무 빠릅니다.
Cian

1
나는 단지 시스템 관리자로서의 경험을 바탕으로 말하고 있습니다. 나는 거의 읽을 수 없을 정도로 다른 사람들이 작성한 코드를 유지해야했습니다. 일반적으로 파이썬으로 코드를 다시 작성합니다.
Michael Pobega

3

작은 일에는 awk, 더 많은 사람들을위한 파이썬.

파이썬 (특정 API 및 기타 플랫폼 의존적 인 것을 사용하지 않는 경우)에는 파이썬 버전을 사용하는 모든 플랫폼에서 사용할 수있는 풍부한 "표준 라이브러리"가 있습니다. 스크립트를 쉽게 재사용 할 수있어 매우 유용하며 플랫폼을 변경하더라도 지식이 좋은 투자임을 의미합니다.

우리 회사에서는 모든 스크립팅, 모니터링 및 응용 프로그램에 대해 Java를 위해 Python을 사용하며 이기종 환경에서 잘 작동합니다.


1

나는 perl과 python이 아마도 가장 좋은 대안이라고 말할 것입니다. sed와 awk로 많은 것을 할 수 있습니다.


1

Sh (본 쉘), grep, awk 및 sed는 항상 다시 그립을 얻는 것이 좋습니다. 텍스트 정규 표현식이 많지 않고 유지 관리 성이 중요하지 않은 경우 Perl이 우수합니다 (가능하지 않다고 말하지 않음). 파이썬; 가독성이 중요하다면. 내가 선호하는 것은 파이썬이지만이 모든 도구는 당신이 던지는 대부분의 것들에 좋습니다. c / c ++ 구문 요구 사항을 재고하고 싶을 때 장기적으로 도움이되지 않습니다.


고마워 마틴 필자는 (웹 샘플에서) Perl이 PHP와 현저한 유사성을 가지고 있음을 알았습니다 (역사적으로 PHP 이전에는 Perl이라고 확신합니다). 이것이 공정한 진술입니까?
Scott Davies

PHP 1.0은 펄 스크립트이므로 우연이 아닙니다 :)
Bill Weiss

1

처음부터 무언가를 배우고 싶다면 배쉬를 다시 배우는 것이 가장 좋습니다.

그 외에도 오늘날 펄과 파이썬은 인기가 있습니다. 나는 perl에 부분적이지만 Perl 4가 나간 이후로 내 perl 스크립팅 스타일은 크게 바뀌지 않았습니다.

나는 "c-syntax-like"스크립팅 언어를 모른다.


1

CPAN의 믿을 수없는 자원 ( http://search.cpan.org/ )에 대해서만 Perl은 손을 내밀어 라 . 이러한 대규모 기여 ​​커뮤니티에서 스크립팅 언어를 사용하면 얻을 수있는 이점이 있습니다.

Perl은 또한 현재 상황에 필요한만큼 복잡하다는 이점이 있습니다. 빠른 관리 또는 단일 목적 스크립트를위한 간단한 스크립팅 언어로 취급 할 수 있지만 더 크고 유지 관리가 쉬운 응용 프로그램 (데몬, 서버, 클라이언트 등)을 만들려는 경우 객체 지향 개념 또는 광범위한 메타 객체 시스템을 사용할 수 있습니다.

스크립팅 언어의 차이점만으로는 확실한 승자를 선택할 수있을만큼 크지는 않지만 주로 관심있는 주제에 대한 정보를 찾는 것이 얼마나 쉬운 지 살펴 봐야합니다.

타이핑 부족과시길을 피할 수 있다면 펄 구문은 C와 매우 비슷할 수있다. 고급 펄 사용은 결국 언어의 강점을 배우면서 자연스럽게 올 것입니다.

또한 가독성 측면의 전문가에게는 모든 언어로 읽기 어려운 코드를 작성할 수 있습니다. 4 개월 전의 코드를 되돌아 보면 이해할 수 없으면 무언가 잘못하고있는 것입니다.

ps이 게시물은 CPAN의 다양한 관리 친화적 인 모듈에 대한 링크로 채워졌지만 새로운 사용자는 하나의 링크 만 게시 할 수 있으므로 해당 CPAN 링크를 사용하여 'CVS' 'SVN' 'Cron'및 'Moose'( 광범위한 객체 시스템)


1
  • 루비
  • 파이썬
  • Go-크로스 플랫폼 언어 인 스크립팅은 Go의 강점 중 하나로 언급됩니다 .
  • Node.js-Grunt.js, Gulp.js를 참조하십시오. 많은 프로젝트들이 Node.js를 쉘 자동화 도구로 사용하고 있습니다.

1

[일반적인 스크립팅 조언에 대해서는 다른 답변을 참조하십시오]

이 답변은 명령 줄 프로그램과 그 큰 체인의 사용에 관한 것입니다.

일련의 CLI 프로그램 및 여러 체인을 순서대로 실행하는 경우 bash가 가장 쉽습니다. 펄 똑같이 할 수 있지만 언어는 배우기가 훨씬 어렵고 훨씬 더 복잡하며 많은 사람들이 지적한 것처럼 이해하기 쉬운 펄을 작성하는 것은 쉽습니다.

파일과 매개 변수를 반복하는 경우 bash는 쉘에서 프로토 타입을 만든 다음 스크립트에 복사하고 최소한의 오버 헤드로 일부 배열과 루프를 추가 할 수있는 가장 쉬운 방법입니다.

내가 의미하는 것의 예 :

$ 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}

bash에서는 이러한 매개 변수 중 일부를 몇 번 반복하여 쉽게 감쌀 수 있습니다. 그러나 스크립트가 수십 줄 이상이되면 코드를 읽기가 어려워집니다. --- 30 개의 서로 다른 데이터 플롯에 대해 30 개의 명령 세트 (각각 몇 줄씩)를 상상하십시오.

Perl 및 Python은 루프 및 변수에 대한 구문이 더 깨끗하기 때문에 대형 스크립트에 더 적합 할 수 있지만 bash 명령은 문자열로 생성되고 서브 프로세스로 실행되고 stdin, stdout이 캡처되어야합니다. 수행 할 수 있지만 기본 쉘 환경을 완전히 대체 할 수는 없습니다.

쉘이 더 나은 언어를 가지고 있다면 이것은 모두 피할 것입니다.


0
  1. 가장 많이 사용 : Perl, 주로 역사적 이유로. 파이썬은 모든 Linux 및 BSD 배포판 (Mac OSX에 설치되어 있음)에서 광범위하게 사용할 수 있으며 배우거나 프로그래밍하는 것이 훨씬 좋습니다. 물론, 일단 구문을 얻으면 Bash는 명령 줄에서 수행 할 수있는 거의 모든 작업에 대해 더 간단합니다. 결국, 그것은 이다 명령 줄은.

    • C 구문 : csh 가 있지만 TCC를 쉽게 설치 하고 실제 언어를 다른 언어 시작보다 짧은 시간에 소스에서 컴파일 된 스크립팅 언어로 사용할 수 있습니다 .

    • 다른 스크립팅 언어 : lot! 루아 , 루비 , 자바 스크립트 ...


0

적절한 경우 모든 조합을 사용해야합니다. 나는 정말로 perl (가독성)을 싫어하지만 많은 것들에 좋습니다. 반면에 파이썬은 몇 대의 KVM 시스템을 관리해야 할 때까지 시스템 관리 측면에서 나에게 새로운 것이 었습니다. 스크립트를 통해 모든 머신을 시작, 중지, 저장,로드 및 마이그레이션하는 것은 libvirt의 python 바인딩으로 1 시간 동안 엉망이 된 후에 현실이되었습니다.

마지막으로, 매일 밤마다 mysql 서버 (자체 덤프 파일의 각 데이터베이스)에서 모든 데이터베이스를 덤프하고 타르하고 다른 서버와 재 동기화해야한다면 펄이나 파이썬을 사용하지 않을 것입니다. 왜 ? bash로 작성하는 것이 더 빠르고 쉽습니다. :)

결국, 현재 작업에 가장 적합한 언어를 사용해야하며 가장 선호하는 스크립트 언어 만 사용해서는 안됩니다.


0

나는 루비를 좋아한다. 프로그래밍이 간단하고 쉽습니다. 루비를 사용한 시스템 관리 에 관한 훌륭한 책이 있습니다 .

Ruby는 여러 구성 관리 시스템 (capistrano, chef, puppet)과 마지막 버전의 metasploit에서 사용됩니다.

루비 구문으로 유닉스 쉘을 대체 하는 rush 를 사용할 수 있으며 다음과 같은 작업을 수행 할 수 있습니다.

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. sysadmin에 Ruby를 사용할 수있을 줄 몰랐습니다. 항상 웹 중심이라고 생각했습니다. 대부분의 조직에서 사용중인 것을 찾고 있습니다. 시스템 관리자를위한 루비가 여전히 최첨단이라고 말할 수 있는가?
Scott Davies

1
Shell / Perl은 어디에서나 안정적으로 설치할 수있는 유일한 두 언어입니다. 파이썬은 아마도 다음 번에 가장 흔할 것이며 루비는 매우 먼 4 분의 1 (실제로, 아마도 awk 뒤에서 5 번째)을 실행합니다.
Cian

@ScottDavies PHP와 ASP.net은 내가 아는 유일한 웹 중심 언어입니다. 웹에서 독점적으로 실행되도록 설계된 Javascript조차도 양식 유효성 검사의 부족으로 인해 성숙했습니다. 그러나 모든 언어로 html을 파견 할 수 있으며 분명히 bash 도 가능 합니다.
ThorSummoner 2018

0

루비 원 라이너 예제 :

> 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

루비를 사용합니다.

sh와 비교하면 현대적이고 강력합니다.

파이썬과 비교하면 일관성, 에디션, 패키지 관리자입니다. 그리고 나는 들여 쓰기 구문을 좋아하지 않습니다.

약간의 구식 인 Perl과 비교하면 구문이 너무 복잡합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.