Python과 비교 한 쉘 스크립팅의 강점 [닫힌]


94

쉘 (bash) 스크립팅을 몇 번 배우려고했지만 구문 때문에 쫓겨났습니다. 그런 다음 Python을 발견하고 Python에서 쉘 스크립트가 할 수있는 대부분의 작업을 수행 할 수있었습니다. 이제 더 이상 쉘 스크립팅을 배우는 데 시간을 투자해야할지 모르겠습니다. 그래서 저는 묻고 싶습니다.

Python에 비해 필수 도구로 만드는 쉘 스크립팅의 장점은 무엇입니까?

저는 직업 별 시스템 관리자는 아니지만 가정 사용자를 위해 Linux 시스템을 설정하는 데 관심이 있으므로 쉘 스크립팅을 배우는 것이 필요할 수 있다고 생각합니다.

답변:


82
  • 쉘 스크립팅에는 I / O 리디렉션에 대한 더 간단한 표기법이 있습니다.
  • 셸의 기존 프로그램에서 파이프 라인을 만드는 것이 더 간단합니다.
  • 쉘 스크립팅은 전체 프로그램을 재사용합니다.
  • Shell은 보편적으로 사용 가능합니다 (Unix와 같은 모든 곳에서)-Python이 반드시 설치되어있는 것은 아닙니다.

셸에서 할 수있는 모든 것을 파이썬으로 할 수 있다는 것은 사실입니다. '쉘에서는 쉽지만 파이썬에서는 어려운 일이있는 것처럼, 쉘에서는 어려운 일이 파이썬에서 쉽다는 것도 사실입니다. 둘 다 아는 것이 장기적으로 가장 좋습니다.


16
1과 2, 좋은 점. # 3은 파이썬이 피할 수있는 많은 오버 헤드를 초래하기 때문에 약점입니다. # 4는 대부분 사실이 아닐 수 있습니다. Python은 현재 대부분의 Linux 배포판의 일부입니다.
S.Lott

1
@Svante : "test"및 "expr"과 같은 명령을 사용하여 여러 작업을 수행하는 간단한 셸 루프를 작성하고 "os"모듈을 사용하는 Python 스크립트와 실행 시간을 비교합니다. test 및 expr과 같은 명령은 종종 실제 작업을 수행하기 위해 하위 프로세스를 분기하는 것을 포함합니다.
S.Lott

2
나는 3 번 포인트가 단점이 아니라 큰 장점이라고 생각합니다. 예를 들어, convert 프로그램을 사용하여 이미지로 가득 찬 디렉토리의 크기를 조정하는 것을 고려하십시오.
Glenn

7
또한 # 4와 관련하여 주목할만한 점은 bash쉘이 모든 리눅스 배포판, 특히 임베디드 시스템 및 실행 busybox파일을 실행하는 다른 배포판에서 보편적으로 사용할 수 없다는 것 입니다. bash이전 버전과 호환 되는 Bourne 쉘 자체를 대상으로하는 스크립트 는 모든 POSIX 호환 시스템에서 실행되지만 해당 언어는에서 구현하는 것보다 훨씬 더 제한적 bash입니다.
intuited

5
@intuited : eval "$ (history 2 | head -1 | perl -pe 's / (? <= which is) more might / at least /')"; history -d $ (history 2 | head -1 | sed 's / ^ \ s * ([0-9] \ +) / \ 1 /')
intuited

54

"Python에 비해 필수 도구로 만드는 쉘 스크립팅의 강점은 무엇입니까?"

껍질은 필수가 아닙니다. 왜 그렇게 많이 있다고 생각하세요? bash, tcsh, csh, sh 등

Python 셸입니다. 모든 명령 을 실행하는 데 사용하는 것은 아니지만 스크립팅에는 이상적입니다.

Python은 모든 Linux 배포판의 표준 부분입니다.

더 전통적인 쉘은 너무 많은 일을합니다.

  1. 명령 실행을위한 편리한 사용자 인터페이스가 있습니다. 여기에는 쉘이 PATH를 검색하고 요청 된 프로그램을 분기하고 실행하는 한 줄 명령이 포함됩니다. 또한 파이프 라인, 시퀀스 및 동시 프로그램 ( 및 사용 ;) |&일부 리디렉션 ( >및 사용 <)도 포함됩니다.

  2. 그들은 스크립트를 실행하기 위해 프로그래밍 언어와 유사한 기능을 가지고 있습니다. 이 언어는 사용하기가 다소 어렵고 매우 비효율적입니다. 이 언어로 된 대부분의 명령문은 시간과 메모리를 낭비하는 하나 이상의 추가 프로세스를 포크해야합니다.

셸에서 프로그램을 실행하고 stderr를 로그 파일로 리디렉션하면 좋습니다. 쉘에서 수행하십시오.

거의 모든 것은 Python 스크립트로 더 효율적이고 명확하게 수행 할 수 있습니다.

둘 다 필요합니다 . 그러나 기존 셸 언어로 if 문이나 루프를 사용하여 스크립트를 작성해서는 안됩니다.


1
@intuited. A) 다른 셸의 확산은 "셸"에 추가되는 기능의 수를 증명합니다. 필수적인 역할은 아니지만 모든 기능을 포괄합니다. B) 파이썬 인터프리터는 적절한 유닉스 쉘이며 #!를 사용합니다. C) "간단한"쉘 if명령문은 종종 test프로그램 실행을 포함 합니다. 쉘은 모든면에서 엉터리 프로그래밍 언어입니다.
S.Lott

4
@에스. Lott : 의미 론적 불협화음이 여기 회로에있는 것 같습니다. UNIX 쉘에 대한 나의 정의는 언어가 주로 UNIX 시스템의 작동을 높은 수준에서 제어하는 ​​데 사용되는 인터프리터입니다. 이 정의에 따르면 어떤 종류의 쉘은 UNIX 시스템의 작동에 확실히 필수적이며 Python은 자격이 없습니다. 그 용어를 어떻게 정의 하시겠습니까?
intuited

1
@ S.Lott : 저는 전통적인 셸 스크립팅에서 사용되는 구문을 좋아하지는 않지만, 프로세스와 출력 흐름을 제어하는 ​​것이 주요 목표 인 많은 상황에서 상당히 유용하고 적절하다고 생각합니다. 이를 위해서는 종종 결정을 내리고 반복해야합니다. 현대 쉘은 ( bash적어도)에 내장 명령이 핸들 의사 결정 (예 : testA는 bash구조 다목적 더뿐만 아니라, 내장). 확실히 약점도 있지만 강점도 있습니다. 다른 종류의 언어와는 매우 다른 패러다임이기 때문에 자세히 배울 가치가 있습니다.
intuited

1
@intuited : "아주 쓸만하다고 생각하라"는 말이 아닌 당신의 기술에 대한 경의입니다. Python은 숙련되지 않은 사람들이 더 유용 할 수 있습니다.
S.Lott

3
@ S.Lott : 흥미롭게도 당신은 저와는 매우 다른 철학을 가지고 있습니다. 저는 디자인과 운영이 기본적으로 닭과 달걀이라고 생각합니다. 즉, 쉘 스크립트는 프로그램을 실행하는 프로그램입니다. 이러한 프로그램의 대부분은 초기에 점점 더 복잡한 쉘 스크립트로 구현되었습니다. 어느 시점에서 모듈화와 같은 효율성을 위해 일부는 C로 다시 작성하고 나중에 Python으로 다시 작성하는 것이 가치가 있습니다. 예 : 어떤 시점에서 cat "$1" | ssh "$2" "cat - >\"$1\""begat scp. 그들은 이미 그것을 사용하고 있었기 때문에 그것을 디자인하는 가장 좋은 방법을 알고있었습니다.
intuited

31

쉘은 더 복잡한 것을 훨씬 더 복잡하게 만드는 대신 일반적이고 단순한 조치를 정말 간단하게 만듭니다.

일반적으로 작은 셸 스크립트는 해당 python 프로그램보다 짧고 간단하지만 python 프로그램은 수정을 정상적으로 받아들이는 경향이있는 반면 셸 스크립트는 코드가 추가됨에 따라 유지 관리가 점점 더 어려워지는 경향이 있습니다.

이것은 최적의 일상적인 생산성을 위해 쉘 스크립팅이 필요하다는 결과를 낳지 만, 대부분 일회용 스크립트에 사용하고 다른 곳에서는 파이썬을 사용해야합니다.


14

파이썬으로 할 수없는 쉘 스크립트로 할 수있는 일은 없습니다. 셸 스크립트의 가장 큰 장점은 셸을 사용할 때와 동일한 명령을 사용한다는 것입니다. 따라서 셸을 많이 사용하는 경우 셸 스크립트는 어느 시점에서 셸 작업을 자동화하는 매우 빠르고 쉬운 방법이 될 것입니다. .

나는 또한 파이썬보다 셸 스크립트에서 데이터 파이프를 처리하는 것이 더 쉽다는 것을 발견했습니다. 그러나 그것은 파이썬에서 절대적으로 가능합니다.

마지막으로, 쉘 스크립트를 실행하기 위해 추가 인터 피터를 실행할 필요가 없으므로 매우 작지만 때로는 눈에 띄는 속도와 메모리 사용 이점을 얻을 수 있습니다.

그러나 다시 말하지만, Python 스크립트는 훨씬 더 유지 관리가 용이합니다. 바로 그 이유 때문에 추악한 셸 스크립트에서 Python 스크립트로 마이그레이션하려고합니다. Python으로 예외 처리 및 QA를 수행하는 것도 더 쉽습니다.


9

모든 이전 답변에서 알 수 있듯이 쉘 스크립팅을 배울 필요가 없습니다. 그러나 학습은 결코 나쁜 것이 아닙니다. 그것은 정말로 개인적인 우선 순위의 문제입니다. 다른 사람이 시간의 가치가있는 것과없는 것을 말하는 것은 매우 어렵습니다.

대부분의 프로그래머는 새로운 언어를 배우는 것이 매번 점점 더 쉬워진다는 것을 알게됩니다. (자연어에서도 마찬가지입니다.) 일찍 시작할수록 좋습니다.

더하기 : 언어를 배웠다면 완전한 지식과 친숙 함의 위치에서 언어의 한계를 과도하게 해소 할 수 있습니다. 이것은 아마도 당신을 눕 히지 않을 것이지만 동료들로부터 맥주를 얻을 수 있습니다!


8

나는 이전 답변의 대부분에 동의합니다. 필자는 파일 시스템 지향 작업 (파일 복사 및 이동, grep 등)을 수행하는 데 가장 적합한 셸 명령을 고려합니다. 내 생각에는 파일을 읽고 써야한다면 Shell이 ​​더 낫습니다. 왜냐하면 단일 >>file.txt리디렉션이 파일에 즉시 추가 되기 때문입니다 file=open('file.txt','a'); file.write().

현재 개인적으로 사용하기 위해 두 가지를 혼합하여 python 스크립트를 만들고 python보다 쉘에서 어떤 작업이 더 쉬울 때마다 os.system ( 'command') 또는 os.popen ( 'command')를 호출합니다.


6

쉘은 어디에서나 사용할 수 있습니다. 비교적 기본적인 휴대용 기능을 고수한다면 스크립트는 휴대폰, 무선 라우터, DVR, 넷북, 워크 스테이션, 대형 철제 서버 등에서 실행할 수 있습니다. Python은 많은 시스템에 기본적으로 포함되어 있지는 않으며 환경에 따라 설치하기 어려울 수 있습니다.

쉘 스크립팅을 배우면 명령 행이 쉘이기 때문에 명령 행 트릭을 배우는 데 도움이 될 수 있습니다. 또한 상당히 길고 복잡한 명령 줄을 가져 와서 더 필요하다는 것을 깨닫고이를보다 일반적인 스크립트로 변환하는데도 좋습니다.

쉘에는 또한 꽤 강력한 기능이 있습니다. 파이프 라인은 내가 아는 한 셸에만 고유 한 정말 흥미로운 제어 구조입니다.


5

Python의 셸 스크립트를 선택할 때 고려해야 할 또 다른 사항은 대상 컴퓨터에서 실행될 Python 버전입니다. RHEL5 (이름 중 하나)는 오랫동안 사용할 것입니다. RHEL5는 Python 2.4에서 멈 춥니 다. Python 2.4 이후에 추가 된 기능에 의존하는 멋진 라이브러리가 많이 있습니다.

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